Собственная CRM & CDP

Термины

  • Бот – сущность на платформе Fasttrack, которая поддерживает работу с несколькими каналами: Telegram, VK, OK, FB, etc.

  • Чат – непосредственный канал общения клиента из соц. сети/мессенджера с ботом на платформе.

  • Профиль – клиент на платформе Fasttrack, у него может быть несколько чатов; привязываются по номеру телефона.

Обмен ключами (опционально)

Fasttrack на своей стороне заводит глобальное приложение CDP. У приложения есть client_id и client_secret. Эти параметры выдаются платформе CDP/CRM.

Далее, CDP/CRM в своем личном кабинете для клиента выводит интеграцию с Fasttrack. Затем пользователь может на нее нажать и после процесс выглядит следующим образом:

  1. Браузер переадресовывает пользователь на страницу авторизации Fasttrack

Пример URL:

<https://dashboard.fstrk.io/integrations/oauth/?client_id=XXX&redirect_uri=https://enkod.io/endpoint_xxx/&state=dummy&code=code>
  • client_id и client_secret – ранее выданные ключи;

  • redirect_uri – куда переадресовать пользователя;

  • state – доп. значение, которое нужно передать в GET-параметрах для redirect_uri;

  • code – временный код.

  1. На странице Fasttrack пользователь выбирает проект (чат-бот), который хочет авторизовать (у пользователя может быть их много);

  2. Браузер переадресовывает юзера обратно на CDP.CRM, на URL переданный параметром redirect_url (пример:https://CDP.io/api/auth/{uuid}/), с добавлением ранее параметра stage и кода авторизации codehttps://CDP.io/api/auth/{uuid}/?stage={str}&code={str};

  3. Бэкенд CDP/CRM обращается на бэкенд Fasttrack, обменивая временный код на постоянный access_token.

Пример POST запроса:

{
   "client_id": "XXX",
   "client_secret": "YYY",
   "grant_type": "code",
   "code": "ПОЛУЧЕННЫЙ_КОД"
}
  1. Затем CDP/CRM сохраняет полученный access_token в профиле клиента и все последующие запросы подписывает в заголовке `Authorization: Bearer <access_token>

Фронтенд CDP/CRM ни в коем случае не ходит на бэкенд Fasttrack, все запросы должны через бэкенд CDP/CRM.

Если выбирается вариант кастомной интеграции, то данный пункт можно не делать.

Получение и отправка сообщений

Данная интеграция актуальна для CRM при необходимости для оператора/продавца вести переписку из профиля пользователя в CRM. Для интеграции с CDP это интеграция не нужна.

Настройка webhook для событий/сообщений от пользователя

Пользователь может написать боту, затем это событие прилетит на указанный URL.

{
   "webhook_url": "https://example.com/receive_webhook/{uuid}/"
}

Пример события, когда пишет клиент:

{
  "event_type": "message_created",
  "payload": {
    "chat": {
      "uuid": "2220b01d-9d51-4006-bad5-857156444b06",
      "avatar": null,
      "platform": "Telegram",
      "phone": null,
      "name": "Иван Пупкин"
    },
    "profile": {
      "uuid": "9305e2f9-6ee8-4b97-9ef9-7f87f84c575c",
      "integrations": {}
    },
    "message": {
      "uuid": "048b22ae-7da6-4d43-b72b-6669a8b67d18",
      "type": "text",
      "text": "как дела?"
    },
    "session_title": null,
    "session_context": null,
    "session": {
      "title": null,
      "context": null,
      "team": {
        "id": 1303,
        "name": "Нераспределенные"
      }
    }
  },
  "timestamp": 1650891884304
}

Чтобы отключить посылку уведомлений, просто отправьте пустой webhook_url.

Настройка webhook для событий/сообщений от пользователя

Пользователь может написать боту, затем это событие прилетит на указанный URL.

{
   "webhook_url": "https://example.com/receive_webhook/{uuid}/"
}

Пример события, когда пишет клиент:

{
  "event_type": "message_created",
  "payload": {
    "chat": {
      "uuid": "2220b01d-9d51-4006-bad5-857156444b06",
      "avatar": null,
      "platform": "Telegram",
      "phone": null,
      "name": "Иван Пупкин"
    },
    "profile": {
      "uuid": "9305e2f9-6ee8-4b97-9ef9-7f87f84c575c",
      "integrations": {}
    },
    "message": {
      "uuid": "048b22ae-7da6-4d43-b72b-6669a8b67d18",
      "type": "text",
      "text": "как дела?"
    },
    "session_title": null,
    "session_context": null,
    "session": {
      "title": null,
      "context": null,
      "team": {
        "id": 1303,
        "name": "Нераспределенные"
      }
    }
  },
  "timestamp": 1650891884304
}

Вебхук когда пишет клиент из вне на платформу

Пример события:

{
   "event_type": "message_created",
   "payload": {
      "chat": {
         "uuid": "b1c99ecb-76f8-4b22-9c1d-fb87f311e5e5",
         "avatar": "https://",
         "platform": "Telegram",
         "phone": null,
         "name": "Ivan Pupkin"
      },
      "profile": {
         "uuid": "007fddc5-c121-483f-9962-016c4952eedf"
      },
      "message": {
         "uuid": "5429be43-acc8-468c-9a79-b8b64b25bc53",
         "type": "text",
         "text": "Привет! Это сообщение прилетело из Телеграм-бота"
      },
      "session": {
         "title": null,
         "context": null,
         "team": {
            "id": 1,
            "name": "Нераспределенные"
         }
      }
   },
   "timestamp": 1678901065779
}

Вебхук когда оператор пишет клиенту

Пример события:

{
   "event_type": "operator_replied",
   "payload": {
      "chat": {
         "uuid": "b1c99ecb-76f8-4b22-9c1d-fb87f311e5e5",
         "avatar": "https://",
         "platform": "Telegram",
         "phone": null,
         "name": "Ivan Pupkin"
      },
      "profile": {
         "uuid": "007fddc5-c121-483f-9962-016c4952eedf"
      },
      "message": {
         "type": "text",
         "text": "Привет сообщение от оператора.",
         "uuid": "6e4a6ad9-74e1-4b09-bdf0-2affe452519e"
      },
      "session": {
         "title": null,
         "context": null,
         "team": {
            "id": 1,
            "name": "Нераспределенные"
         },
         "operator": {
            "uuid": "ff713022-1ef3-49b9-8a71-83ea07295666",
            "name": "Operator 1",
            "avatar": null
         }
      }
   },
   "timestamp": 1678901061322
}

Отправка сообщения пользователю через UUID чата

Если в п. 1.1 прилетело событие от подписчика, вы можете на него ответить, используя следующий формат:

{
   "event": "message_created",
   "chat": {
      "uuid": "2220b01d-9d51-4006-bad5-857156444b06"
   },
   "message": {
      "type": "text",
      "text": "Привет, у меня все отлично!"
   },
   "sender": {
      "name": "Иван Пупкин"
   },
   "timestamp": 1624607235580
}

Отправка PUSH-сообщения по профилю (UUID/номер телефона) для CDP

Предусловие. Настроенная интеграция по передаче информации профиля Fasttrack в CDP (настраивается на стороне Fasttrack кастомно или продуктизировано).

Отправить сообщение по UUID:

{
   "profile": {
      "uuid": "00000000-0000-0000-0000-000000000000"
   },
   "content": {
      "type": "TEXT",
      "text": "Текст сообщения"
   }
}

Отправить сообщение по номеру телефона:

{
   "profile": {
      "phone_number": "+79999999999"
   },
   "content": {
      "type": "TEXT",
      "text": "Текст сообщения"
   }
}

Отправка платного сообщения WABA пользователю при инициации (написать первым) или за пределами 24-х часового окна для CDP и CRM

Предварительно шаблоны должны заведены быть на платформе Fasttrack и согласованы провайдером (в текущий момент поддерживаются EDNA и SMS Traffic).

{
   "profile": {
      "phone_number": "+79999999999"
   },
   "content": {
      "type": "WHATSAPP_TEMPLATE",
      "whatsapp_template": {
         "pid": "hello_world"
      },
      "whatsapp_template_variables": {
         "v1": "Иван"
      }
   }
}

Отправка сообщения используя “каскад” для CDP или CRM

Отправка одного запроса для отправки на несколько каналов пошагово.

{
   "phone_number": "79991234567",
   "routing": [
      "BOT",
      "WHATSAPP",
      "VIBER",
      "VK",
      "SMS"
   ],
   "validity_period_seconds": 120,
   "whatsapp_template_name": "hello_world",
   "whatsapp_template_variables": {
      "v1": "Иван"
   }
}

Можно использовать независимо, в интеграцию, описанную в п. 1 «Обмен ключами», будет добавлено в ближайших спринтах.

Список шаблонов WABA

Созданные и добавленные.

Данный сценарий не является необходимым для отправки шаблонов, может использоваться для визуализации шаблонов в CDP и CRM.

Пример ответа:

{
   "count": 1,
   "next": null,
   "previous": null,
   "results": [
      {
         "provider_template_id": "test",
         "name": "test",
         "status": "NOT_WORKED",
         "sections": [
            "CHAT_CENTER",
            "BROADCAST_CAMPAIGNS",
            "CONSTRUCTOR"
         ],
         "text": "Hello: {{ v1 }}.",
         "variables": [
            "v1"
         ],
         "buttons": [
            {
               "text": "test"
            }
         ]
      }
   ]
}

Доставка статусов WABA

Имеется возможность дополнительно в настройках в учетке Fasttrack установить специальный URL адрес, на который будут приходить статусы о доставках. Можно при необходимости добавить end-point в рамках интеграции (п.0)

Пример события:

{
   "timestamp": 1651777267.2949505,
   "type": "update",
   "model": "message",
   "data": {
      "uuid": "7feeec45-8013-4757-afb2-6326b358082e",
      "status": "sent",
      "detail": null,
      "messages": [
         {
            "status": "undelivered",
            "error": "failed"
         }
      ]
   }
}

Доставка статусов по каскадным отправкам

Позволяет получать статусы доставок, выполненные по цепочке. Посылка пакета со статусами происходит в том случае, когда транзакция завершается. Устанавливается вручную, через техническую поддержку.

Пример события:

{
   "event_type": "transaction.done",
   "payload": {
      "uuid": "04191c1d-e7dd-4572-a544-6eb9c2855a5e",
      "done_at": "2022-05-05T18:41:00.831294Z",
      "done_status": "MESSAGE_SENT",
      "successful_routes": [
         "WHATSAPP"
      ],
      "route_details": {
         "BOT": {
            "uuid": "cfa41bcb-fdf6-4a34-a8a7-4334e5014bbc",
            "state": "ERROR",
            "response_status": null,
            "response_description": null
         },
         "WHATSAPP": {
            "uuid": "855d6d27-58d4-4ae4-9deb-de6c504cc845",
            "state": "SENT",
            "response_status": "DELIVERED",
            "response_description": null
         }
      }
   },
   "timestamp": 1651776060.8439758
}

Last updated