Внимание!
В данный момент lambda-скрипты находятся в стадии закрытого бета-тестирования.
Lambda Scripts — это вычислительный ресурс, позволяющий загрузить ваш собственный код и запустить его в ответ на определенные условия.
Ваш код выполняется в облачной вычислительной инфраструктуре. Все необходимые ресурсы создаются и выделяются автоматически. Вам не нужно беспокоиться о серверах, операционных системах, обеспечении отказоустойчивости, мониторинге и т.д.
Скрипты можно использовать для расширения функционала Carrot quest с помощью индивидуального кода и создания собственных интеграций. Работает на базе технологии AWS Lambda.
На данный момент доступны две среды выполнения:
ОС: Amazon Limux AMI. Версия ядра Linux: 3.14.48-33.39.amzn1.x86_64.
Более подробную информацию о лежащих в основе технологиях можно узнать в документации к AWS Lambda.
Мы предполагаем множество вариантов использования:
Использовать лямбда скрипт как webhook в стороннем сервисе. Тем самым проще соединять другие сервисы с Carrot quest
Использовать как адрес для webhook в нашем же сервисе — можно преобразовать данные в нужный формат, тем самым более гибко соединять Carrot quest с другими сервисами
Периодически выполнять скрипт (например, синхронизировать базу лидов с другим сервисом)
Скрипты создаются в разделе "Интеграции", группа "Интеграции своими руками".
После создания скрипта будет доступен URL, по которому будет находиться ваш скрипт. Адрес формируется следующим образом:
https://lambda-script.carrotquest.io/{id}/{token}/{run-type}
{id}
содержит идентификатор интеграции
{token}
токен скрипта
{run-type}
может принимать два значения:
sync
при вызове скрипт будет выполнен синхронно и вернет результатasync
скрипт будет выполнен асинхронно без возврата результатаВ вашем скрипте обязательно должна присутствовать точка входа — функция
run
, которая будет запущена при выполнении скрипта.
Входной функции будет передано два параметра: event
и context
:
event
будет содержать параметры, с которыми был вызван ваш скрипт:
event.method
будет содержать HTTP-методevent.query
будет содержать GET-параметрыevent.body
будет содержать POST-параметры
Для Python event
будет иметь тип dict
, для JavaScript — Object
context
содержит служебную информацию (подробнее
для Python,
для JavaScript)
Этот скрипт записывает строку в лог и возвращает HTTP-метод, который был использован для вызова:
# Python
def run(event, context):
print 'Hello, world!'
return 'I was invoked via %s!' % event['method']
// JavaScript
exports.run = function(event, context) {
console.log('Hello, console');
context.succeed('I was invoked via %s!' % event.method);
}
Для Python event
будет иметь тип dict
, для JavaScript — Object
.
После создания скрипта в панели администратора ему присваивается уникальный
URL.
Например: https://lambda-script.carrotquest.io/162/2f8efdb8-7bfb-4494-b913-f320a5eb7c74/sync
.
По этому URL можно выполнять HTTP-запросы типа GET, POST, PATCH, PUT или DELETE.
Попробуем сделать тестовый запрос:
curl -X POST \
--data-urlencode "param1=value1" \
--data-urlencode "param2=value2" \
https://lambda-script.carrotquest.io/my/func/sync?param3=value3
Будет вызван ваш скрипт, в котором параметр event
будет таким:
{
"method": "POST",
"body": {
"param2": "value2",
"param1": "value1"
},
"query": {
"param3": "value3"
}
}
Мы поддерживаем следующие типы кодировок тела HTTP-запроса:
Для первых двух отдельные параметры будет соответствовать ключам
в объекте event.body
.
При использовании application/json тело запроса будет без изменений
скопировано в event.body
.
Если есть несколько GET или POST параметров с одинаковым именем, то они будут объединены в массив. Например:
curl https://lambda-script.carrotquest.io/my/func/sync?x=1&x=2&y=3
{
"method": "GET",
"body": {},
"query": {
"x": ["1", "2"],
"y": 3
}
}
В некоторых случаях не нужно дожидаться результата работы lambda-скрипта. Например, вы пишете обработчик webhook стороннего сервиса и нет необходимости возвращать какое-то значение.
При асинхронном запросе будет запущен скрипт на выполнение, а затем немедленно возвращен ответ со статусом 200.
Чтобы вызвать скрипт асинхронно, нужно заменить последнюю часть адреса
sync
на async
. Пример асинхронного адреса:
https://lambda-script.carrotquest.io/162/xxxx-xxxx/async
Для тестирования параметра events вы можете использовать
тестовый скрипт:
https://lambda-script.carrotquest.io/shared/echo/sync
.
curl -X GET "https://lambda-script.carrotquest.io/shared/echo/sync?x=10"
{
"body": {},
"query": {
"x": "10"
},
"method": "GET"
}