Skip to content

Замените {Название интеграции} на реальное название (например: "Telegram", "Slack", "WhatsApp")

Краткое описание интеграции в 1-2 предложения. Что это за сервис и для чего используется интеграция.

Быстрый старт

typescript
// Минимальный пример для начала работы
import { IntegClient } from "@integ/core";

const client = new IntegClient({
	accessToken: "your-access-token"
});

// Пример вызова основного метода
const result = await client.integrationName.send({
	to: "recipient",
	message: "Hello!"
});

Обзор

Возможности

  • Возможность 1 - краткое описание
  • Возможность 2 - краткое описание
  • Возможность 3 - краткое описание

Архитектура

mermaid
graph LR
    App[Ваше приложение] --> IntegAPI[Integ API]
    IntegAPI --> Gateway[Gateway API]
    Gateway --> Service[Внешний сервис]

Требования

Предварительные условия

  • [ ] Аккаунт в сервисе
  • [ ] API ключ / Bot Token (получить здесь: [ссылка])
  • [ ] Настроенный Integ API

Необходимые секреты

СекретОписаниеГде получить
api_keyAPI ключ для авторизации[ссылка]
bot_tokenТокен бота (если есть)[ссылка]
webhook_urlURL для вебхуков (optional)Настроить

Установка

1. Создание интеграции

bash
curl -X POST http://localhost:3000/api/integrations \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "integration-name"}'

2. Добавление секретов

bash
# API Key
curl -X POST http://localhost:3000/api/secrets \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "integration": "integration-name",
    "key": "api_key",
    "value": "your-api-key"
  }'

# Bot Token (если нужен)
curl -X POST http://localhost:3000/api/secrets \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "integration": "integration-name",
    "key": "bot_token",
    "value": "your-bot-token"
  }'

3. Создание handlers

bash
curl -X POST http://localhost:3000/api/handlers \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "integrationId": "your-integration-id",
    "name": "send-message",
    "defaultArgs": {
      "timeout": 5000,
      "retries": 3
    }
  }'

4. Проверка установки

bash
# Получить информацию об интеграции
curl http://localhost:3000/api/integrations/your-integration-id \
  -H "Authorization: Bearer $TOKEN"

Конфигурация

Переменные окружения

ПеременнаяОписаниеПо умолчанию
INTEGRATION_NAME_TIMEOUTТаймаут запросов (ms)5000
INTEGRATION_NAME_RETRIESКоличество повторов3

Handler параметры

typescript
interface HandlerDefaultArgs {
	timeout?: number; // Таймаут в миллисекундах
	retries?: number; // Количество повторных попыток
	// Добавьте специфичные для интеграции параметры
}

API Reference

Методы

sendMessage

Отправка сообщения.

Параметры:

ПараметрТипОбязательныйОписание
tostringДаПолучатель
textstringДаТекст сообщения
optionsobjectНетДополнительные опции

Пример:

typescript
const result = await client.integrationName.sendMessage({
	to: "user-id",
	text: "Hello, World!",
	options: {
		parse_mode: "HTML"
	}
});

Ответ:

json
{
	"success": true,
	"messageId": "msg-123",
	"timestamp": "2024-01-01T00:00:00.000Z"
}

getStatus

Получение статуса сообщения.

Параметры:

ПараметрТипОбязательныйОписание
messageIdstringДаID сообщения

Пример:

typescript
const status = await client.integrationName.getStatus({
	messageId: "msg-123"
});

Вебхуки (если поддерживаются)

Настройка вебхука

bash
curl -X POST http://localhost:3000/api/webhooks \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "integration": "integration-name",
    "url": "https://your-domain.com/webhook",
    "events": ["message.received", "message.delivered"]
  }'

Формат входящих событий

json
{
	"event": "message.received",
	"timestamp": "2024-01-01T00:00:00.000Z",
	"data": {
		"messageId": "msg-456",
		"from": "user-id",
		"text": "Hello!"
	}
}

Примеры использования

Отправка простого сообщения

typescript
import axios from "axios";

const api = axios.create({
	baseURL: "http://localhost:3000/api",
	headers: {
		Authorization: `Bearer ${process.env.TOKEN}`
	}
});

async function sendMessage(to: string, text: string) {
	const { data } = await api.post("/handlers/handler-id/invoke", {
		args: { to, text }
	});

	return data;
}

// Использование
await sendMessage("user-123", "Hello from Integ!");

Обработка входящих сообщений

typescript
import express from "express";

const app = express();
app.use(express.json());

app.post("/webhook", (req, res) => {
	const { event, data } = req.body;

	switch (event) {
		case "message.received":
			console.log(`Received message from ${data.from}: ${data.text}`);
			// Обработка входящего сообщения
			break;

		case "message.delivered":
			console.log(`Message ${data.messageId} delivered`);
			break;
	}

	res.status(200).send("OK");
});

app.listen(3001);

Полный пример интеграции

typescript
import axios from "axios";

const TOKEN = process.env.INTEG_TOKEN;
const INTEGRATION_NAME = "integration-name";

const api = axios.create({
	baseURL: "http://localhost:3000/api",
	headers: { Authorization: `Bearer ${TOKEN}` }
});

async function setupIntegration() {
	// 1. Создать интеграцию
	const { data: integration } = await api.post("/integrations", {
		name: INTEGRATION_NAME
	});
	console.log("Integration created:", integration.id);

	// 2. Добавить секреты
	await api.post("/secrets", {
		integration: INTEGRATION_NAME,
		key: "api_key",
		value: process.env.SERVICE_API_KEY
	});
	console.log("Secrets configured");

	// 3. Создать handler
	const { data: handler } = await api.post("/handlers", {
		integrationId: integration.id,
		name: "send-message",
		defaultArgs: { retries: 3, timeout: 5000 }
	});
	console.log("Handler created:", handler.id);

	// 4. Использовать handler
	const { data: result } = await api.post(`/handlers/${handler.id}/invoke`, {
		args: {
			to: "recipient-id",
			text: "Test message"
		}
	});
	console.log("Message sent:", result);

	return { integration, handler };
}

setupIntegration().catch(console.error);

Troubleshooting

Частые ошибки

401 Unauthorized

Причина: Неверный или истёкший токен.

Решение:

bash
# Проверить токен
curl http://localhost:3000/api/auth/me \
  -H "Authorization: Bearer $TOKEN"

# Получить новый токен
curl -X POST http://localhost:3000/api/auth/sign-in \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com", "password": "password"}'

400 Invalid API Key

Причина: Секрет api_key не настроен или неверный.

Решение:

bash
# Проверить секреты
curl http://localhost:3000/api/secrets?integration=integration-name \
  -H "Authorization: Bearer $TOKEN"

# Обновить секрет
curl -X PATCH http://localhost:3000/api/secrets/secret-id \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"value": "correct-api-key"}'

504 Gateway Timeout

Причина: Внешний сервис не отвечает.

Решение:

  1. Проверить статус внешнего сервиса
  2. Увеличить таймаут в defaultArgs
  3. Проверить сетевое подключение

Логирование

bash
# Просмотр логов Integ API
docker logs integ-api --tail 100 -f

# Фильтрация по интеграции
docker logs integ-api 2>&1 | grep "integration-name"

Ограничения

  • Максимальный размер сообщения: X KB
  • Rate limit: Y запросов в минуту
  • Поддерживаемые типы файлов: список

Связанные документы