承接 joinposter/intercom-integration-php 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

joinposter/intercom-integration-php

Composer 安装命令:

composer require joinposter/intercom-integration-php

包简介

Intercom API client built on top of Guzzle 6 for Poster POS

README 文档

README

Code Climate Circle CI

Official PHP bindings to the Intercom API

Installation

This library supports PHP 7.1 and later

This library uses HTTPlug as HTTP client. HTTPlug is an abstraction that allows this library to support many different HTTP Clients. Therefore, you need to provide it with an adapter for the HTTP library you prefer. You can find all the available adapters in Packagist. This documentation assumes you use the Guzzle6 Client, but you can replace it with any adapter that you prefer.

The recommended way to install intercom-php is through Composer:

composer require intercom/intercom-php php-http/guzzle6-adapter

Clients

Initialize your client using your access token:

use Intercom\IntercomClient;

$client = new IntercomClient('<insert_token_here>');

If you already have an access token you can find it here. If you want to create or learn more about access tokens then you can find more info here.

If you are building a third party application you can get your OAuth token by setting-up-oauth for Intercom.

For most use cases the code snippet above should suffice. However, if needed, you can customize the Intercom client as follows:

use Intercom\IntercomClient;

$client = new IntercomClient('<insert_token_here>', null, ['Custom-Header' => 'value']);

$client->setHttpClient($myCustomHttpClient); // $myCustomHttpClient implements Psr\Http\Client\ClientInterface
$client->setRequestFactory($myCustomRequestFactory); // $myCustomRequestFactory implements Http\Message\RequestFactory
$client->setUriFactory($myCustomUriFactory); // $myCustomUriFactory implements Http\Message\UriFactory

API Versions

This library is intended to work with any API Version. By default, the version that you have configured for your App in the Developer Hub will be used. However, you can overwrite that version for a single request or for all the requests using this library by including the Intercom-Version header when initializing the client as follows:

$client = new IntercomClient('<insert_token_here>', null, ['Intercom-Version' => '1.1']);

For more information about API Versioning, please check the API Versioning Documentation and the API changelog.

Users

Important: Not all the resources supported by this API are supported by all API versions. See the notes below or the API Reference for more information about the resources supported by each API version.

Contacts

This resource is only available in API Versions 2.0 and above

/** Create a contact */
$client->contacts->create([
    "type" => "user",
    "email" => "test@example.com",
    "custom_attributes" => ['foo' => 'bar']
]);

/** Update a contact */
$client->contacts->update("570680a8a1bcbca8a90001b9", [
    "email" => "test@example.com",
    "custom_attributes" => ['foo' => 'bar']
]);

/** Permanently delete a contact */
$client->contacts->deleteContact("570680a8a1bcbca8a90001b9");

/** Get a contact by ID */
$client->contacts->getContact("570680a8a1bcbca8a90001b9");

/** Search for contacts */
$query = ['field' => 'name', 'operator' => '=', 'value' => 'Alice'];
$client->contacts->search([
    "query" => $query,
    "sort" => ["field" => "name", "order" => "ascending"],
    "pagination" => ["per_page" => 10]
]);

/** Get next page of conversation search results */
$client->contacts->nextSearch($query, $response->pages);

/** List all contacts */
$client->contacts->getContacts([]);

Users

This resource is only available in API Versions 1.0 to 1.4. Newer versions use the Contacts resource instead.

/** Create a user */
$client->users->create([
    "email" => "test@example.com",
    "custom_attributes" => ['foo' => 'bar']
]);

/**
 * Update a user (Note: This method is an alias to the create method. In practice you
 * can use create to update users if you wish)
 */
$client->users->update([
    "email" => "test@example.com",
    "custom_attributes" => ['foo' => 'bar']
]);

/** Archive a user by ID (i.e. soft delete) */
$client->users->archiveUser("570680a8a1bcbca8a90001b9");

/** Permanently delete a user */
$client->users->permanentlyDeleteUser("570680a8a1bcbca8a90001b9");

/** For more on the difference between archive and permanently deleting a user please see https://developers.intercom.com/reference#archive-a-user. */

/** Get a user by ID */
$client->users->getUser("570680a8a1bcbca8a90001b9");

/** Add companies to a user */
$client->users->create([
    "email" => "test@example.com",
    "companies" => [
        [
            "company_id" => "3"
        ]
    ]
]);

/** Remove companies from a user */
$client->users->create([
    "email" => "test@example.com",
    "companies" => [
        [
            "company_id" => "3",
            "remove" => true
        ]
    ]
]);

/** Find a single user by email */
$client->users->getUsers(["email" => "bob@example.com"]);

/** List all users up to 10k records */
$client->users->getUsers([]);

/**
 * List all users (even above 10k records)
 * The result object contains an array of your user objects and a scroll_param which you can then
 * use to request the next 100 users. Note that the scroll parameter will time out after one minute
 * and you will need to make a new request
 */
$client->users->scrollUsers();

See here for more info on using the scroll parameter

Leads

This resource is only available in API Versions 1.0 to 1.4. Newer versions use the Contacts resource instead.

/**
 * Create a lead
 * See more options here: https://developers.intercom.io/reference#create-lead
 */
$client->leads->create([
    "email" => "test@example.com",
    "custom_attributes" => ['foo' => 'bar']
]);

/**
 * Update a lead (Note: This method is an alias to the create method.
 * In practice you can use create to update leads if you wish)
 */
$client->leads->update([
    "email" => "test@example.com",
    "custom_attributes" => ['foo' => 'bar']
]);

/**
 * List leads
 * See more options here: https://developers.intercom.io/reference#list-leads
 */
$client->leads->getLeads([]);

/** Find a lead by ID */
$client->leads->getLead("570680a8a1bcbca8a90000a9");

/** Delete a lead by ID */
$client->leads->deleteLead("570680a8a1bcbca8a90000a9");

/** Convert a Lead to a User */
$client->leads->convertLead([
    "contact" => [
        "user_id" => "8a88a590-e1c3-41e2-a502-e0649dbf721c"
    ],
    "user" => [
        "email" => "winstonsmith@truth.org"
    ]
]);

/**
 * List all leads (even above 10k records)
 * The result object contains an array of your contacts objects and a scroll_param which you can then
 * use to request the next 100 leads. Note that the scroll parameter will time out after one minute
 * and you will need to make a new request
 */
$client->leads->scrollLeads();

See here for more info on using the scroll parameter

Visitors

Retrieve user_id of a visitor via the JavaScript API

/** Update a visitor */
$client->visitors->update([
    "user_id" => "8a88a590-e1c3-41e2-a502-e0649dbf721c",
    "custom_attributes" => ['foo' => 'bar']
]);

/** Find a visitor by ID */
$client->visitors->getVisitor("570680a8a1bcbca8a90000a9");

/** Find a visitor by User ID */
$client->visitors->getVisitor("", ["user_id" => "8a88a590-e1c3-41e2-a502-e0649dbf721c"]);

/** Delete a visitor by ID */
$client->visitors->deleteVisitor("570680a8a1bcbca8a90000a9");

/** Convert a Visitor to a Lead */
$client->visitors->convertVisitor([
    "visitor" => [
        "user_id" => "8a88a590-e1c3-41e2-a502-e0649dbf721c"
    ],
    "type" => "lead"
]);

/** Convert a Visitor to a User */
$client->visitors->convertVisitor([
    "visitor" => [
        "user_id" => "8a88a590-e1c3-41e2-a502-e0649dbf721c"
    ],
    "user" => [
        "email" => "winstonsmith@truth.org"
    ],
    "type" => "user"
]);

Tags

/** List tags */
$client->tags->getTags();

/**
 * Tag users
 * See more options here: https://developers.intercom.io/reference#tag-or-untag-users-companies-leads-contacts
 */
$client->tags->tag([
    "name" => "Test",
    "users" => [
        ["id" => "1234"]
    ]
]);

Segments

/** List Segments */
$client->segments->getSegments();

/** View a segment */
$client->segments->getSegment("58a707924f6651b07b94376c");

/** View a segment with count */
$client->segments->getSegment("59c124f770e00fd819b9ce81", ["include_count"=>"true"]);

Events

/** Create an event */
$client->events->create([
    "event_name" => "testing",
    "created_at" => 1391691571,
    "email" => "test@example.com",
    "metadata" => [
        "order_date" => 1392036272,
        "stripe_invoice" => "inv_3434343434"
    ]
]);

/** View events for a user */
$client->events->getEvents(["email" => "bob@example.com"]);

Companies

/** Create a company */
$client->companies->create([
    "name" => "foocorp",
    "company_id" => "3"
]);

/**
 * Update a company
 */
$client->companies->update([
    "name" => "foocorp",
    "id" => "3"
]);

/** Create or update a company with custom attributes. */
$client->companies->update([
    "name" => "foocorp",
    "id" => "3",
    "custom_attributes" => [
        "foo" => "bar",
        "baz" => "qux"
    ]
]);

/** List Companies */
$client->companies->getCompanies([]);

/** Get a company by ID */
$client->companies->getCompany("531ee472cce572a6ec000006");

/** List users belonging to a company by ID */
$client->companies->getCompanyUsers("531ee472cce572a6ec000006");

/** List users belonging to a company by company_id */
$client->companies->getCompanies(["type" => "user", "company_id" => "3"]);

/**
 * Add companies to a contact with IDs
 * First parameter is contact ID, second is company ID
 */
$client->companies->attachContact("570680a8a1bcbca8a90001b9", "531ee472cce572a6ec000006");

/**
 * Detach company from contact
 * First parameter is contact ID, second is company ID
 */
$client->companies->detachContact("570680a8a1bcbca8a90001b9", "531ee472cce572a6ec000006");

Admins

/** List admins */
$client->admins->getAdmins();

Messages

/**
 * Send a message from an admin to a user
 * See more options here: https://developers.intercom.io/reference#conversations
 */
$client->messages->create([
    "message_type" => "inapp",
    "subject" => "Hey",
    "body" => "Ponies, cute small horses or something more sinister?",
    "from" => [
        "type" => "admin",
        "id" => "1234"
    ],
    "to" => [
        "type" => "user",
        "email" => "bob@example.com"
    ]
]);

Conversations

/**
 * List conversations for an admin
 * See more options here: https://developers.intercom.io/reference#list-conversations
 */
$client->conversations->getConversations([
    "type" => "admin",
    "admin_id" => "25610"
]);

/** Get a single conversation */
$client->conversations->getConversation("1234")

/** Get a single conversation with plaintext comments */
$client->conversations->getConversation("1234", [
    "display_as" => "plaintext"
])

/** Search for conversations (API version >= 2.0) */
$query = ['field' => 'updated_at', 'operator' => '>', 'value' => '1560436784'];
$client->conversations->search([
    "query" => $query,
    "sort" => ["field" => "updated_at", "order" => "ascending"],
    "pagination" => ["per_page" => 10]
]);

/** Get next page of conversation search results (API version >= 2.0) */
$client->conversations->nextSearch($query, $response->pages);

/**
 * Reply to a conversation
 * See more options here: https://developers.intercom.io/reference#replying-to-a-conversation
 */
$client->conversations->replyToConversation("5678", [
    "email" => "test@example.com",
    "body" => "Thanks :)",
    "type" => "user",
    "message_type" => "comment"
]);

/**
 * Reply to a user's last conversation
 * See more options here: https://developers.intercom.com/reference#replying-to-users-last-conversation
 */
$client->conversations->replyToLastConversation([
    "email" => "test@example.com",
    "body" => "Thanks :)",
    "type" => "user",
    "message_type" => "comment"
]);

/**
 * Mark a conversation as read
 * See API documentation here: https://developers.intercom.io/reference#marking-a-conversation-as-read
 */
$client->conversations->markConversationAsRead("7890");

Counts

/**
 * List counts
 * See more options here: https://developers.intercom.io/reference#getting-counts
 */
$client->counts->getCounts([])

Notes

/** Create a note */
$client->notes->create([
    "admin_id" => "21",
    "body" => "Text for my note",
    "user" => [
        "id" => "5310d8e8598c9a0b24000005"
    ]
]);

/** List notes for a user */
$client->notes->getNotes([
  "user_id" => "25"
]);

/** Get a single Note by id */
$client->notes->getNote("42");

Teams

/** List teams */
$client->teams->getTeams();

/** Get a single Team by id */
$client->teams->getTeam("1188");

Rate Limits

Rate limit info is passed via the rate limit headers. You can access this information as follows:

$rate_limit = $client->getRateLimitDetails();
print("{$rate_limit['remaining']} {$rate_limit['limit']} \n");
print_r($rate_limit['reset_at']->format(DateTime::ISO8601));

For more info on rate limits and these headers please see the API reference docs

Pagination

When listing, the Intercom API may return a pagination object:

{
  "pages": {
    "next": "..."
  }
}

You can grab the next page of results using the client:

$client->nextPage($response->pages);

In API versions 2.0 and above subsequent pages for listing contacts can be retreived with:

$client->nextCursor($response->pages);

Scroll

The first time you use the scroll API you can just send a simple GET request. This will return up to 100 records. If you have more than 100 you will need to make another call. To do this you need to use to scroll_parameter returned in the original response. Use this for subsequent responses until you get an empty array of records. This means there are no records and the scroll timer will be reset. For more information on scroll please see the API reference Here is an example of a simple way to use the scroll for multiple calls:

require "vendor/autoload.php";

use Intercom\IntercomClient;

$client = new IntercomClient(getenv('AT'), null);
$resp = $client->users->scrollUsers([]);
$count = 1;
echo "PAGE $count: " . sizeof($resp->users);
echo "\n";
while (!empty($resp->scroll_param) && sizeof($resp->users) > 0) {
    $count = ++$count;
    $resp = $client->users->scrollUsers(["scroll_param" => $resp->scroll_param]);
    echo "PAGE $count: " . sizeof($resp->users);
    echo "\n";
}

Exceptions

Exceptions are handled by HTTPlug. Every exception thrown implements Http\Client\Exception. See the http client exceptions and the client and server errors. The Intercom API may return an unsuccessful HTTP response, for example when a resource is not found (404). If you want to catch errors you can wrap your API call into a try/catch block:

try {
    $user = $client->users->getUser("570680a8a1bcbca8a90001b9");
} catch(Http\Client\Exception $e) {
    if ($e->getCode() == '404') {
        // Handle 404 error
        return;
    } else {
        throw $e;
    }
}

Pull Requests

  • Add tests! Your patch won't be accepted if it doesn't have tests.

  • Document any change in behaviour. Make sure the README and any other relevant documentation are kept up-to-date.

  • Create topic branches. Don't ask us to pull from your master branch.

  • One pull request per feature. If you want to do more than one thing, send multiple pull requests.

  • Send coherent history. Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please squash them before sending them to us.

joinposter/intercom-integration-php 适用场景与选型建议

joinposter/intercom-integration-php 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 20 次下载、GitHub Stars 达 1, 最近一次更新时间为 2020 年 06 月 01 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「api」 「Guzzle」 「intercom」 「intercom.io」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 joinposter/intercom-integration-php 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 joinposter/intercom-integration-php 我们能提供哪些服务?
定制开发 / 二次开发

基于 joinposter/intercom-integration-php 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 20
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 10
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 3
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: Apache-2.0
  • 更新时间: 2020-06-01