Существует два варианта получения входящих событий api:
- Через webhook — подписка на webhooks
- Через websockets, используя протокол pusher-api
Для работы через pusher-api доступно множество готовых библиотек на разных языках программирования. Рассмотрим пример получения событий, с использованием библиотеки pusher-js.
1. Подключаем pusher-js
<script src="https://js.pusher.com/7.0/pusher.min.js"></script>
2. Задаем настройки подключения
Примечание: В настройках подключения необходимо указать только ваш accessToken, полученный методом v1.tokens.make (другие переменные менять не нужно).
let pusher = new Pusher('ChatsAppApiProdKey', {
wsHost: 'socket.chatapp.online',
wssPort: 6001,
disableStats: true,
authEndpoint: 'https://api.chatapp.online/broadcasting/auth',
auth: {
headers: {
'Authorization': '$2y$10$l.SQOBOaqz3ZU65JAlEK4ughTCzIbcVGpJIUNTVnGpaKOYOd4M' // accessToken, полученный методом v1.tokens.make
}
},
enabledTransports: ['ws'],
forceTLS: true
});
3. Подключаемся к приватному каналу
Всего существует 3 типа приватных каналов:
- private-v1.licenses.1229.messengers.grWhatsApp - канал мессенджера в линии
- private-v1.companies.2224 - канал компании
- private-v1.users.685 - канал пользователя
let channel = pusher.subscribe('private-v1.licenses.1229.messengers.grWhatsApp');
// или
let channel = pusher.subscribe('private-v1.licenses.1229.messengers.telegram');
Примечание: Один мессенджер в одной линии - это один канал. 1229 - это номер вашей линии. grWhatsApp - это тип мессенджера в линии.
let channelCompany = pusher.subscribe('private-v1.companies.2224');
Примечание: Одна компания - это один канал. 2224 - это номер вашей компании.
let channelUser = pusher.subscribe('private-v1.users.685');
Примечание: Один пользователь - это один канал. 685 - это id пользователя.
4. Слушаем входящие события
// входящее/исходящее сообщение
channel.bind('message', (data) => {
console.log(data);
});
// статус отправленного сообщения
channel.bind('messageStatus', (data) => {
console.log(data);
});
// добавлена/удалена метка для чата
channel.bind('chatTag', (data) => {
console.log(data);
});
// статус сотрудника
channelCompany.bind('employeeStatus', (data) => {
console.log(data);
});
// добавлен/изменен/удален быстрый ответ
channelUser.bind('quickResponse', (data) => {
console.log(data);
});
Доступные события для канала - линия-мессенджер:
- message (входящее/исходящее сообщение)
- messageSystem (системное сообщение)
- messageStatus (статус отправленного сообщения)
- messageDestroy (удаление сообщения)
- messageReaction (реакция для сообщения)
- chatTag (добавлена/удалена метка для чата)
- chatStatus (установлен статус для чата)
- chatResponsible (установлен ответственный для чата)
- chatResponsiblePin (закреплен/откреплен ответственный для чата)
- chatProducer (установлен постановщик для чата)
- chatAccomplice (добавлен/удален соисполнитель для чата)
- chatAuditor (добавлен/удален наблюдатель для чата)
- chatLevel (установлен уровень для чата)
- chatConversation (открыто 24-х часовое окно (доступно только для WhatsApp))
- chatRead (чат помечен как прочитанный)
- chatUnread (чат помечен как непрочитанный)
- chatProcess (установлен процесс для чата)
- chatParticipantAdd (добавление участника в группу (доступно для telegram и telegramBot))
- chatParticipantDestroy (удаление участника из группы (доступно для telegram и telegramBot))
- chatComment (установлен комментарий для чата)
- chatConsentSendMessage (установлено согласие на отправку сообщений для чата)
- chatArchive (чат добавлен в архив или чат восстановлен из архива)
- chatCustomField (изменено значение пользовательского поля чата)
Доступные события для канала - компания:
- employeeStatus (статус сотрудника)
- employeeWorkday (рабочий день сотрудника)
Доступные события для канала - пользователь:
- quickResponseList (добавлен/изменен/удален список быстрых ответов)
- quickResponse (добавлен/изменен/удален быстрый ответ)
Полный код примера:
<script src="https://js.pusher.com/7.0/pusher.min.js"></script>
<script>
window.onload = function() {
let pusher = new Pusher('ChatsAppApiProdKey', {
wsHost: 'socket.chatapp.online',
wssPort: 6001,
disableStats: true,
authEndpoint: 'https://api.chatapp.online/broadcasting/auth',
auth: {
headers: {
'Authorization': '$2y$10$l.SQOBOaqz3ZU65JAlEK4ughTCzIbcVGpJIUNTVnGpaKOYOd4M' // accessToken, полученный методом v1.tokens.make
}
},
enabledTransports: ['ws'],
forceTLS: true
});
let channel = pusher.subscribe('private-v1.licenses.1229.messengers.grWhatsApp');
channel.bind('message', (data) => {
console.log(data);
});
channel.bind('messageStatus', (data) => {
console.log(data);
});
channel.bind('chatTag', (data) => {
console.log(data);
});
let channel2 = pusher.subscribe('private-v1.licenses.1229.messengers.telegram');
channel2.bind('message', (data) => {
console.log(data);
});
channel2.bind('messageStatus', (data) => {
console.log(data);
});
channel2.bind('chatTag', (data) => {
console.log(data);
});
let channelCompany = pusher.subscribe('private-v1.companies.2224');
channelCompany.bind('employeeStatus', (data) => {
console.log(data);
});
let channelUser = pusher.subscribe('private-v1.users.685');
channelUser.bind('quickResponseList', (data) => {
console.log(data);
});
channelUser.bind('quickResponse', (data) => {
console.log(data);
});
};
</script>
Пример объекта message (входящее/исходящее сообщение):
{
"data": [
{
"id": "123",
"internalId": 37914,
"groupId": null,
"fromApi": false,
"fromMe": false,
"side": "in",
"time": 1637319282,
"type": "text",
"subtype": null,
"message": {
"text": "Test",
"textLang": null,
"caption": "",
"file": null,
"location": null,
"template": null,
"html": ""
},
"quotedMessage": {
"id": "122",
"type": "text",
"subtype": null,
"message": {
"text": "test",
"textLang": null,
"caption": "",
"file": null,
"location": null,
"template": null,
"html": ""
}
},
"fromUser": {
"id": "1480675234",
"username": "username_test",
"name": "Test Test",
"phone": "7000000000",
"email": null
},
"chat": {
"id": "private-1480005234h1360003129730259258",
"internalId": 199167,
"hash": null,
"type": "private",
"phone": "7000000000",
"username": "username_test",
"email": null,
"name": "Test Test",
"image": "https://test.test/GetDialogPhoto/3bf70000-941b-4e19-50a0e900",
"lastTime": 1718789705,
"link": null,
"tags": [
{
"id": 6,
"name": "test",
"color": "hhhh",
"sort": 100,
"category": {
"id": 13,
"name": "test",
"sort": 100
}
}
],
"responsible": {
"id": 685
},
"producer": {
"id": 685
},
"accomplices": [
{
"id": 100
}
],
"auditors": [
{
"id": 100
}
],
"status": "close",
"level": null,
"responsiblePin": false,
"process": null,
"timeLastInMessage": 1718789705,
"unreadMessages": 1,
"lastRead": 1718785472,
"advert": null,
"secondLink": null,
"subtype": null,
"inviteLink": null,
"lastMessage": {
"type": "text",
"previewText": "Тест",
"previewTextLang": null
},
"comment": null,
"consentSendMessage": null,
"archive": false,
"customFields": [
{
"id": 32,
"name": "Float field",
"type": "numeric",
"sort": 105,
"options": null,
"value": 1234.66672
},
{
"id": 21,
"name": "Select field",
"type": "select",
"sort": 105,
"options": [
{
"id": 205,
"value": "Значение 4",
"sort": 400
},
{
"id": 206,
"value": "Значение 4",
"sort": 400
}
],
"value": 205
}
]
},
"fromApp": null,
"utm": null,
"created": null,
"forwarded": true,
"edited": false
}
],
"meta": {
"type": "message",
"licenseId": 1229,
"messengerType": "telegram"
}
}
Пример объекта messageSystem (системное сообщение):
{
"data": [
{
"id": "9f01676a-cbe9-4fbc-bd46-5286b4195fdc",
"internalId": 40551,
"groupId": null,
"fromApi": true,
"fromMe": true,
"side": "out",
"time": 1724309901,
"type": "system",
"subtype": null,
"message": {
"text": "Set responsible Test Testov [685]",
"textLang": {
"en": "Set responsible Test Testov [685]",
"ru": "Назначен ответственный Test Testov [685]",
"pt": "Set responsável Test Testov [685]"
},
"caption": "",
"file": null,
"location": null,
"template": null,
"html": ""
},
"quotedMessage": null,
"fromUser": {
"id": null,
"username": null,
"name": "test",
"phone": null,
"email": null
},
"chat": {
"id": "70000000000@c.us",
"internalId": 199167,
"fullId": "aeec7c86edd95240f07af53427cbcd48",
"hash": null,
"type": "private",
"phone": "70000000000",
"username": null,
"email": null,
"name": "Test Test",
"image": "https://pps.whatsapp.net/v/t62.24694-24/42954918280157_n.jpg",
"lastTime": 1724309901,
"link": null,
"tags": [
{
"id": 9,
"name": "test",
"color": "#123df",
"sort": 1111,
"category": []
},
{
"id": 11,
"name": "test 2",
"color": "#123df",
"sort": 1111,
"category": []
}
],
"responsible": {
"id": 685
},
"producer": {
"id": 685
},
"accomplices": null,
"auditors": null,
"status": "open",
"level": {
"id": 555
},
"responsiblePin": false,
"process": null,
"timeLastInMessage": 1724309838,
"unreadMessages": 1,
"lastRead": 1724237989,
"advert": null,
"secondLink": null,
"subtype": null,
"inviteLink": null,
"lastMessage": {
"type": "system",
"previewText": "Set responsible Test Testov [685]",
"previewTextLang": {
"en": "Set responsible Test Testov [685]",
"ru": "Назначен ответственный Test Testov [685]",
"pt": "Set responsável Test Testov [685]"
}
},
"comment": null,
"consentSendMessage": null,
"archive": false,
"customFields": null
},
"fromApp": {
"id": "app_685_1",
"tracking": null,
"sender": null
},
"utm": null,
"created": {
"id": 685
},
"forwarded": false,
"edited": false
}
],
"meta": {
"type": "messageSystem",
"licenseId": 1229,
"messengerType": "grWhatsApp"
}
}
Пример объекта messageStatus (статус отправленного сообщения):
{
"data": [
{
"id": "wamid.HBgQMzQzMjQ3OTYxNDkwMjAzNxUCABEYEkE5MDlBMTFERTBBQkVCQkMyRAA=",
"type": "failed", // delivered|viewed|failed|sent
"time": 1706175215,
"chat": {
"id": "70000000000",
"hash": null,
"type": "private",
"phone": "70000000000",
"username": null,
"email": null
},
"fromApp": {
"id": "app_123_1",
"tracking": null,
"sender": "employee"
},
"error": {
"code": 131026,
"message": "Message Undeliverable.",
"messageLang": {
"en": "Message Undeliverable.",
"ru": "Невозможно доставить сообщение.",
"pt": "Mensagem não entregue."
}
}
}
],
"meta": {
"type": "messageStatus",
"licenseId": 1229,
"messengerType": "caWhatsApp"
}
}
Пример объекта messageDestroy (удаление сообщения):
{
"data": [
{
"id": "1252",
"chat": {
"id": "private-243232294h-5444116472189911315"
}
}
],
"meta": {
"type": "messageDestroy",
"licenseId": 16402,
"messengerType": "telegram"
}
}
Пример объекта messageReaction (реакция для сообщения):
{
"data": [
{
"id": "wamid.HBgLNzk4OTk3MjU0NDIVAgARGBIyNjYzNkVEMTcyOTczMDgxMEEA",
"reaction": "😂",
"time": "1697795977",
"chat": {
"id": "79899725000"
},
"fromUser": {
"id": "79899725000",
"name": "Alisher Boy"
},
"action": "react" // unreact
}
],
"meta": {
"type": "messageReaction",
"licenseId": 1229,
"messengerType": "caWhatsApp"
}
}
Пример объекта chatTag (добавлена/удалена метка для чата):
{
"data": [
{
"type": "add", // add|destroy
"tag": {
"id": 29,
"name": "test 1",
"color": "#123df55",
"sort": 100,
"category": {
"id": 9,
"name": "test 1",
"sort": 100
}
},
"chat": {
"id": "group-54911000655"
}
}
],
"meta": {
"type": "chatTag",
"licenseId": 1229,
"messengerType": "telegram"
}
}
Пример объекта chatConversation (открыто 24-х часовое окно (доступно только для WhatsApp и caWhatsApp)):
{
"data": [
{
"conversation": {
"id": "ccb637d17ba3aced8051abc263bd72e4",
"type": "BIC",
"startTime": 1644500500,
"endTime": 1644586900
},
"chat": {
"id": "70000000000"
}
}
],
"meta": {
"type": "chatConversation",
"licenseId": 1229,
"messengerType": "WhatsApp"
}
}
Пример объекта chatStatus (установлен статус для чата):
{
"data": [
{
"type": "close",
"chat": {
"id": "70000000000@c.us"
}
}
],
"meta": {
"type": "chatStatus",
"licenseId": 1229,
"messengerType": "grWhatsApp"
}
}
Пример объекта chatResponsible (установлен ответственный для чата):
{
"data": [
{
"responsible": {
"id": 685
},
"chat": {
"id": "70000000000@c.us"
},
"fromApp": {
"id": "app_123_1"
},
"edited": {
"id": 685
}
}
],
"meta": {
"type": "chatResponsible",
"licenseId": 1229,
"messengerType": "grWhatsApp"
}
}
Пример объекта chatResponsiblePin (закреплен/откреплен ответственный для чата):
{
"data": [
{
"type": "pin", // pin|unpin
"chat": {
"id": "70000000000@c.us"
}
}
],
"meta": {
"type": "chatResponsiblePin",
"licenseId": 1229,
"messengerType": "grWhatsApp"
}
}
Пример объекта chatProducer (установлен постановщик для чата):
{
"data": [
{
"producer": {
"id": 685
},
"chat": {
"id": "70000000000@c.us"
},
"fromApp": {
"id": "app_123_1"
},
"edited": {
"id": 685
}
}
],
"meta": {
"type": "chatProducer",
"licenseId": 1229,
"messengerType": "grWhatsApp"
}
}
Пример объекта chatAccomplice (добавлен/удален соисполнитель для чата):
{
"data": [
{
"type": "add", // add|destroy
"accomplice": {
"id": 685
},
"chat": {
"id": "70000000000@c.us"
},
"fromApp": {
"id": "app_123_1"
},
"edited": {
"id": 685
}
}
],
"meta": {
"type": "chatAccomplice",
"licenseId": 1229,
"messengerType": "grWhatsApp"
}
}
Пример объекта chatAuditor (добавлен/удален наблюдатель для чата):
{
"data": [
{
"type": "add", // add|destroy
"auditor": {
"id": 685
},
"chat": {
"id": "70000000000@c.us"
},
"fromApp": {
"id": "app_123_1"
},
"edited": {
"id": 685
}
}
],
"meta": {
"type": "chatAuditor",
"licenseId": 1229,
"messengerType": "grWhatsApp"
}
}
Пример объекта chatLevel (установлен уровень для чата):
{
"data": [
{
"level": {
"id": 555
},
"chat": {
"id": "70000000000@c.us"
},
"fromApp": {
"id": "app_685_1"
},
"edited": {
"id": 685
}
}
],
"meta": {
"type": "chatLevel",
"licenseId": 1229,
"messengerType": "grWhatsApp"
}
}
Пример объекта chatRead (чат помечен как прочитанный):
{
"data": [
{
"chat": {
"id": "7000000000@c.us"
}
}
],
"meta": {
"type": "chatRead",
"licenseId": "1229",
"messengerType": "grWhatsApp"
}
}
Пример объекта chatUnread (чат помечен как непрочитанный):
{
"data": [
{
"chat": {
"id": "7000000000@c.us"
}
}
],
"meta": {
"type": "chatUnread",
"licenseId": "1229",
"messengerType": "grWhatsApp"
}
}
Пример объекта chatProcess (установлен процесс для чата):
{
"data": [
{
"process": "inWork", // null|inWork
"chat": {
"id": "70000000000@c.us"
},
"fromApp": {
"id": "app_685_1"
},
"edited": {
"id": 685
}
}
],
"meta": {
"type": "chatProcess",
"licenseId": 1229,
"messengerType": "grWhatsApp"
}
}
Пример объекта chatParticipantAdd (добавление участника в группу (доступно для telegram и telegramBot))
{
"data": [
{
"chat": {
"id": -1002224731326
},
"participants": [
{
"id": 1234567,
"username": "test",
"name": "Test",
"phone": null
},
{
"id": 1234567,
"username": "test2",
"name": "Test 2",
"phone": null
}
]
}
],
"meta": {
"type": "chatParticipantAdd",
"licenseId": 1229,
"messengerType": "telegramBot"
}
}
Пример объекта chatParticipantDestroy (удаление участника из группы (доступно для telegram и telegramBot))
{
"data": [
{
"chat": {
"id": -1002224731326
},
"participants": [
{
"id": 1234567,
"username": "test",
"name": "Test",
"phone": null
}
]
}
],
"meta": {
"type": "chatParticipantDestroy",
"licenseId": 1229,
"messengerType": "telegramBot"
}
}
Пример объекта employeeStatus (статус сотрудника):
{
"data": [
{
"type": "online",
"employee": {
"id": 685
}
}
],
"meta": {
"type": "employeeStatus",
"companyId": 2226
}
}
Пример объекта employeeWorkday (рабочий день сотрудника):
{
"data": [
{
"type": "start|end",
"employee": {
"id": 685
}
}
],
"meta": {
"type": "employeeWorkday",
"companyId": 2226
}
}
Пример объекта quickResponseList (добавлен/изменен список быстрых ответов):
{
"data": [
{
"type": "create", // create|edit
"quickResponseList": {
"id": 1338,
"name": "List name",
"sort": 100,
"access": [
{
"userId": "685",
"email": "test@test.test",
"permission": "w"
},
{
"userId": "124",
"email": "test2@test.test",
"permission": "r"
}
]
}
}
],
"meta": {
"type": "quickResponseList",
"userId": "685"
}
}
Пример объекта quickResponseList (удален список быстрых ответов):
{
"data": [
{
"type": "destroy",
"quickResponseList": {
"id": 1338
}
}
],
"meta": {
"type": "quickResponseList",
"userId": "685"
}
}
Пример объекта quickResponse (добавлен/изменен быстрый ответ):
{
"data": [
{
"type": "create", // create|edit
"quickResponseList": {
"id": 1339
},
"quickResponse": {
"id": 1197,
"name": "Response name",
"sort": 300,
"parent": null,
"text": "Detail text",
"keywords": "test test2 test4",
"enableAI": true
}
}
],
"meta": {
"type": "quickResponse",
"userId": "685"
}
}
Пример объекта quickResponse (удален быстрый ответ):
{
"data": [
{
"type": "destroy",
"quickResponseList": {
"id": 1339
},
"quickResponse": {
"id": 1197
}
}
],
"meta": {
"type": "quickResponse",
"userId": "685"
}
}
Пример объекта quickResponse (массовое удаление быстрых ответов):
{
"data": [
{
"type": "destroy",
"quickResponseList": {
"id": 1339
},
"quickResponse": {
"id": 1197
}
},
{
"type": "destroy",
"quickResponseList": {
"id": 1339
},
"quickResponse": {
"id": 1198
}
}
],
"meta": {
"type": "quickResponse",
"userId": "685"
}
}
Пример объекта chatComment (установлен комментарий для чата):
{
"data": [
{
"comment": "This is comment",
"chat": {
"id": "70000000000"
},
"fromApp": {
"id": "app_25095_1"
},
"edited": {
"id": 25095
}
}
],
"meta": {
"type": "chatComment",
"licenseId": 12345,
"messengerType": "WhatsApp"
}
}
Пример объекта chatConsentSendMessage (установлено согласие на отправку сообщений для чата):
{
"data": [
{
"consentSendMessage": "accepted",
"chat": {
"id": "70000000001@c.us"
},
"fromApp": {
"id": "app_25095_1"
},
"edited": {
"id": 25095
}
}
],
"meta": {
"type": "chatConsentSendMessage",
"licenseId": 1,
"messengerType": "grWhatsApp"
}
}
Пример объекта chatArchive (чат добавлен в архив или чат восстановлен из архива):
{
"data": [
{
"archive": false, // true|false
"chat": {
"id": "70000000001@c.us"
}
}
],
"meta": {
"type": "chatArchive",
"licenseId": 1229,
"messengerType": "grWhatsApp"
}
}
Пример объекта chatCustomField (изменено значение пользовательского поля чата):
{
"data": [
{
"field": {
"id": 30,
"name": "String field",
"type": "string",
"sort": 105,
"options": null,
"value": "Test"
},
"chat": {
"id": "70000000001@c.us"
}
}
],
"meta": {
"type": "chatCustomField",
"licenseId": 1229,
"messengerType": "grWhatsApp"
}
}