Перейти к содержанию

Ссылки на SmartApp

В клиенте "eXpress" можно осуществлять переход в SmartApp по ссылке. В чате сообщения с такими ссылками дополняются кнопкой Открыть:

Рисунок_1

Конфигурирование сервера

Для корректной генерации ссылок для всех ECTS необходимо в ETCD установить в true следующий параметр:

/express/messaging/{server_id}/links_with_ets_id
Например, для ECTS с ID eff3a64d-6beb-4b53-a581-03d3485c3d48 в консоли сервера ETCD необходимо выполнить:

$ etcdctl put \
   /express/messaging/eff3a64d-6beb-4b53-a581-03d3485c3d48/links_with_ets_id \
   true

Создание ссылки

Ссылку на SmartApp генерируется двумя способами:

  • внутри SmartApp вызвать метод SDK.createDeeplink;
  • сформировать самостоятельно. Для самостоятельного формирования ссылки используется следующий формат:

    https://<link_host>/open/smartapp/<app_id>?ets_id=<ets_id>&<param1>=<value1>&<param2>=<value2>&...
    
    Параметр Тип данных Описание
    link_host string Адрес сервиса ссылок, по-умолчанию xlnk.ms
    app_id string ID SmartApp, которое откроется. Значение можно взять в поле App ID (уникальный человекочитаемый идентификатор бота) в консоли администратора CTS
    ets_id string ID ETS-сервера в формате uuid. Данный параметр не нужно указывать, если CTS не подключен к ETS
    param1..N string Название параметра, передаваемого в открывающийся SmartApp
    value1..N string Значение параметра, передаваемого в SmartApp, обязательно url-encoded

Пример ссылки:

https://xlnk.ms/open/smartapp/email-smartapp?route=new-mail&to=test%40mail.ru

Получение данных ссылки в SmartApp

При открытии SmartApp по ссылке параметры ссылки будут доступны в ответе ready.

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import * as SDK from "@expressms/smartapp-sdk";

async function initApp() {
  const readyResponse = await SDK.ready();

  // Проверка что данные поступают от диплинка
  if (readyResponse.initialData?.initiator == "deeplink") {
    const { meta } = readyResponse.initialData;

    // Объект meta содержит все параметры, переданные в ссылке
    console.log(meta.route, meta.to);
  }
}