Начать пользоваться нашим API легко. Просто выполните указанные действия по порядку:
Теперь всё готово для работы с переписками и сообщениями.
- Получить список переписок
- Получить все сообщения в переписке
- Отправить сообщение в переписку
- Как писать первым в whatsapp
Происходит через private_api_token который выдается через contact@pact.im или чат на сайте.
Пример запроса: curl -X GET 'https://api.pact.im/p1/companies?private_api_token=XXXXX'
POST /p1/companies
{
name: string, # Required
phone: string, # Optional
description: text, # Optional
webhook_url: string # Optional
}
Response:
{
status: string, # ENUM: 'created|inited|errored'
data: {
external_id: integer # Company ID
},
errors: [string] # Errors if status `errored`
}
GET /p1/companies
Response:
{
status: string, # ENUM: 'ok|errored'
data: {
companies: [
{
external_id: integer,
name: string,
phone: string,
description: text, # Optional
webhook_url: string # Optional
}
]
}
errors: [string] # Errors if status `errored`
}
PUT /p1/companies/COMPANY_ID
{
name: string, # Optional
phone: string, # Optional
description: text, # Optional
webhook_url: string # Optional
}
Response:
{
status: string, # ENUM: 'updated|errored'
data: {
external_id: integer, # Company ID
},
errors: [string] # Errors if status `errored`
}
Каналом связи может быть аккаунт telegram, instagram, viber, whatsapp, группа Вконтакте либо страница Facebook. Если вы подключаете whatsapp обязательно ознакомьтесь с webhook-ом для получения QR-кода.
POST /p1/companies/COMPANY_ID/channels
{
provider: string, # Required. ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
token: string, # Required for 'facebook|vk|telegram|viber'
login: string, # Required for 'instagram'
password: string # Required for 'instagram'
}
Response:
{
status: string, # ENUM: 'created|inited|errored'
data: {
external_id: integer, # Channel ID
},
errors: [string] # Errors if status `errored`
}
GET /p1/companies/COMPANY_ID/channels
Response:
{
status: string, # ENUM: 'ok|errored'
data: {
channels: [
{
external_id: integer,
provider: string,
}
]
}
errors: [string] # Errors if status `errored`
}
PUT /p1/companies/COMPANY_ID/channels/CHANNEL_ID
{
token: string, # Required for 'facebook|vk|telegram|viber'
login: string, # Required for 'instagram'
password: string # Required for 'instagram'
}
Response:
{
status: string, # ENUM: 'updated|errored'
data: {
external_id: integer, # Channel ID
},
errors: [string] # Errors if status `errored`
}
DELETE /p1/companies/COMPANY_ID/channels/CHANNEL_ID
Response:
{
status: string, # ENUM: 'deleted|errored'
errors: [string] # Errors if status `errored`
}
GET /p1/companies/COMPANY_ID/conversations
Response:
{
status: string, # ENUM: 'ok|errored'
data: {
conversations: [
{
external_id: integer,
name: string,
channel_id: integer,
channel_type: string, # ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
created_at: timestamp,
last_message_at: timestamp,
last_income_message_at: timestamp
}
]
}
errors: [string] # Errors if status `errored`
}
GET /p1/companies/COMPANY_ID/conversations/CONVERSATION_ID/messages
Response:
{
status: string, # ENUM: 'ok|errored'
data: {
messages: [
{
external_id: integer,
channel_id: integer,
channel_type: string, # ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
message: string,
income: boolean, # true|false
created_at: timestamp, # External timestamp (where message was send in messenger)
attachments: [
{
external_id: integer,
url: string,
caption: string,
metadata: {}
}
]
}
]
}
errors: [string] # Errors if status `errored`
}
POST /p1/companies/COMPANY_ID/conversations/CONVERSATION_ID/messages
{
message: "Hello world"
}
Response:
{
status: string, # ENUM: 'ok|errored'
data: {
message: {
external_id: integer,
channel_id: integer,
channel_type: string, # ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
message: string,
income: boolean, # true|false
created_at: timestamp, # External timestamp (where message was send in messenger)
attachments: [
{
external_id: integer,
url: string,
caption: string,
metadata: {}
}
]
}
}
errors: [string] # Errors if status `errored`
}
Мы можем оповещать внешние сервисы HTTP коллбеками по заданному URL (атрибут webhook_url в объекте company). Ниже пример данных которые мы отправляем:
{
type: 'system',
severity: string, # ENUM: 'critical|notification|information'
data: {
message: string,
code: integer,
date: timestamp,
details: {
entity: string, # ENUM 'company|channel|conversation|message',
entity_id: integer
}
}
}
{
type: 'conversation',
event: 'new',
data: {
external_id: integer,
name: string,
channel_id: integer,
channel_type: string, # ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
created_at: timestamp,
last_message_at: timestamp,
last_income_message_at: timestamp
}
}
{
type: 'message',
event: 'new',
data: {
external_id: integer,
channel_id: integer,
channel_type: string, # ENUM: 'whatsapp|facebook|vk|telegram|instagram|viber'
message: string,
income: boolean, # true|false
created_at: timestamp, # External timestamp (where message was send in messenger)
attachments: [
{
external_id: integer,
url: string,
caption: string,
metadata: {}
}
]
}
}
После создания канала имеющего тип whatsapp
начинается периодическая отправка коллбэка содержащего изображение QR-кода в формате data url base64 encoded image. Данное изображение необходимо вывести на экран для последующего сканирования пользователем в мобильном приложении Whatsapp. Отправка коллбэка данного типа прекращается после успешного подключения Whatsapp.
{
type: 'qr_code',
event: 'new',
channel_id: integer,
data: {
expired: integer, # milliseconds from the Unix epoch: 1500362776592
image: string # data URL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAWDUlEQVR4Xu3d...."
}
}
Для того чтобы написать первым клиенту, которого нет в списке контактов нужно выполнить запрос указанный ниже. При успешном выполнении запроса будет автоматически создан conversation, а также будут отправлены два webhook-а с типами 'conversation' и 'message' содержащие всю информацию о начатой переписке. Дальнейшую отправку сообщений в созданную переписку следует выполнять так как описано в пункте Отправить сообщение в переписку данного руководства.
POST /p1/companies/COMPANY_ID/channels/CHANNEL_ID/conversations
{
phone: string, # Phone number: '79220010101'
text: string # text message
}
Response:
{
status: string, # ENUM: 'ok|errored'
errors: [string] # Errors if status `errored`
}