Если виджет предоставляет возможность синхронизации задач amoCRM с другими сервисами управления задачами, то он может встроиться в модальное окно синхронизации.

Для этого необходимо указать локейшны задач в manifest.json:
{
...
"locations": [
"tlist",
"tline",
"tcalendar"
],
...
}
В колбэках виджета также есть специальный колбэк “calendarSync”, который выполнится при открытии данного модального окна, он обязательно должен возвращать объект с определенного вида, что описан в примере ниже.
this.callbacks: {
calendarSync: function() {
var load_promise = new Promise(function(resolve, reject) {
// Запрос на бэк-энд для получения статуса виджета
setTimeout(resolve, 2000);
}
return {
// {String} Заголовок виджета в модалке синхронизации
name: this.langs.widget.name,
// {String} Описание виджета в модалке синхронизации
description: this.langs.widget.description,
// {Boolean|Promise} Состояние синхронизации.
// Если Boolean, то виджет сразу примет это состояние,
// но обычно нужно сделать запрос на back-end,
// поэтому можно вернуть promise, где resolve(true|false)
// задаст состояние синхронизации виджета после получения ответа,
// А reject([error_msg]) выведет сообщение об ошибке.
enabled: load_promise || false,
// {Function} Callback на нажатие кнопки "Включить".
// Должен вернуть Promise
onEnable: function() {
return new Promise(function(resolve, reject) {
if (confirm('Вы действительно хотите установить виджет')) {
resolve();
} else {
reject('Вы отказались от установки виджета')
}
},
// {Function} Callback на нажатие кнопки "Отключить".
// Должен вернуть Promise
onDisable: function() {
return new Promise(function(resolve, reject) {
var answer = prompt('Введите секретный ключ для подтверждения отключения:');
if (answer === 'Super manager!') {
resolve();
} else {
reject('Неверный секретный ключ.')
}
},
// {Function} - Необязательный Callback на нажатие кнопки настроек.
// Когда есть, в правом углу виджета появляется шестеренка с настройками.
// На нажатие по ней можно написать свою логику.
// Функция может ничего не возвращать.
onSetup: function() {
// Ваш код
},
};
}
}