Адаптер ioBroker для seven.io
Этот адаптер подключает ioBroker к API для SMS и коммуникаций seven.io . Отправляйте SMS-сообщения и запускайте голосовые вызовы с преобразованием текста в речь непосредственно из ваших автоматизаций, скриптов Blockly или JavaScript — с управлением контактами, отслеживанием доставки, опросом входящих SMS и мониторингом баланса счета.
Функции
- Отправка SMS — запуск через точку данных, блок Blockly или
sendTo() - Flash SMS — сообщение отображается непосредственно на экране получателя.
- Голосовые вызовы (TTS) — чтение любого текста вслух во время автоматического звонка.
- Статус доставки — автоматическая проверка примерно через 60 секунд после отправки, записывается в специальное состояние.
- Управление контактами — синхронизация контактов из seven.io как отдельных точек данных; создание новых контактов непосредственно из ioBroker.
- Получатель по имени — введите имя контакта вместо номера телефона; адаптер автоматически определит его.
- Опрос баланса счета — настраиваемый интервал, результат доступен в виде читаемого состояния.
- Опрос входящих SMS — прием входящих SMS (требуется арендованный виртуальный номер, см. ниже)
- Блок Blockly — готовый к использованию блок в категории «Отправить кому» с флажками для отправки SMS и/или голосовых вызовов.
sendTo()API — полная поддержка скриптов для адаптера JavaScript.
Требования
- Аккаунт на seven.io
- Действительный ключ API (его можно найти в вашей панели управления seven.io в разделе «Разработчик» → «Ключи API» ).
Модель затрат:
- Отправка SMS-сообщений и голосовые звонки оплачиваются по факту использования — вы платите только за сообщение или звонок, без ежемесячной платы.
- Для получения входящих SMS-сообщений требуется виртуальный номер телефона, арендованный у seven.io (примерно 20 евро в месяц). Без арендованного номера опрос входящих сообщений недоступен.
Частные пользователи: seven.io — это в первую очередь бизнес-сервис. При регистрации необходимо указать название компании. Частные пользователи могут просто ввести свое имя или слово «Privat» в это поле — seven.io подтвердил, что это допустимо.
Конфигурация
| Параметр | Описание | По умолчанию |
|---|---|---|
| Ключ API | Ваш API-ключ seven.io | (необходимый) |
| Идентификатор отправителя по умолчанию | Имя или номер отправителя, отображаемые получателям. Максимум 11 буквенно-цифровых или 16 цифровых символов. Оставьте поле пустым, чтобы использовать значение по умолчанию для учетной записи seven.io. Чтобы разрешить ответы, используйтеgetReplies: true за сообщение (Blockly илиsendTo() ) — см. Входящие SMS . | (пустой) |
| Интервал опроса баланса | Как часто (в минутах) адаптер опрашивает баланс вашего счета | 30 |
| Интервал опроса входящих SMS-сообщений | Как часто (в минутах) адаптер проверяет наличие новых входящих SMS-сообщений. Установите значение...0 отключить. | 0 |
| Код страны для указания цен | код страны ISO (например)DE ,US ) Чтобы загрузить информацию о ценах на SMS только для этой страны. Оставьте поле пустым, чтобы загрузить информацию по всем странам. | (пустой) |
Точки данных
info
| Состояние | Тип | Описание |
|---|---|---|
info.connection | логический | true когда адаптер может получить доступ к API seven.io |
account
| Состояние | Тип | Описание |
|---|---|---|
account.balance | число | Текущий баланс счета |
account.currency | нить | Валюта (например)EUR ) |
account.lastCheck | нить | ISO-метка времени последнего опроса баланса |
contacts
| Состояние | Тип | Описание |
|---|---|---|
contacts.json | строка (JSON) | Полный список контактов в виде массива JSON. |
contacts.count | число | Количество контактов |
contacts.refresh | логический | Установить наtrue для немедленного обновления контактов |
contacts.new.name | нить | Имя для нового контакта, который нужно создать. |
contacts.new.number | нить | Номер телефона для нового контакта (формат:491234567890 , без+ ) |
contacts.new.save | логический | Установить наtrue для создания контакта и обновления списка |
contacts.list.<Name> | нить | Один штат на контакт — название штата является отображаемым именем контакта (например,contacts.list.Max_Mustermann ), значение — это номер телефона. |
sms
| Состояние | Тип | Р/В | Описание |
|---|---|---|---|
sms.to | нить | рв | Получатель — номер телефона (+491234567890 ) или контактное имя (например)Max Mustermann ) |
sms.from | нить | рв | Переопределение идентификатора отправителя — пусто = использовать значение по умолчанию из настроек |
sms.text | нить | рв | Текст сообщения (максимум 1520 символов / ~10 частей SMS) |
sms.flash | логический | рв | Отправить в виде флэш-SMS (сообщение отображается непосредственно на экране) |
sms.getReplies | логический | рв | Включить общий пул ответов, чтобы получатель мог отвечать — по умолчанию — с возможностью выбора для каждого сообщения. false |
sms.send | логический | рв | Установить наtrue отправить — сбрасывается наfalse автоматически |
sms.lastResult | строка (JSON) | р | Полный ответ API последней попытки отправки, включая statusText |
sms.lastStatus | нить | р | Удобочитаемый статус последней отправленной записи (например)Success ,Insufficient credits ) |
sms.lastDelivery | строка (JSON) | р | Отчет о доставке получен примерно через 60 секунд после отправки — содержитid ,to ,status (напримерDELIVERED ) |
sms.inbound
| Состояние | Тип | Описание |
|---|---|---|
sms.inbound.id | нить | Идентификатор сообщения последнего полученного SMS |
sms.inbound.from | нить | Номер отправителя последнего полученного SMS-сообщения |
sms.inbound.text | нить | Текстовое содержимое последнего полученного SMS-сообщения |
sms.inbound.timestamp | нить | Отметка времени получения SMS-сообщения |
voice
| Состояние | Тип | Р/В | Описание |
|---|---|---|---|
voice.to | нить | рв | Номер телефона получателя |
voice.from | нить | рв | Подтвержденный номер звонящего (должен быть зарегистрирован в вашем аккаунте seven.io) |
voice.text | нить | рв | Текст для чтения вслух (TTS), максимум 10 000 символов. |
voice.ringtime | число | рв | Сколько времени должно пройти до завершения вызова (5–60 секунд, по умолчанию 30) |
voice.send | логический | рв | Установить наtrue Чтобы начать звонок — сбрасывается наfalse автоматически |
voice.lastResult | строка (JSON) | р | Полный ответ API после последней попытки вызова |
voice.lastStatus | нить | р | Удобочитаемый статус последнего звонка (например)Success ,Call failed ) |
pricing
| Состояние | Тип | Описание |
|---|---|---|
pricing.json | строка (JSON) | Полные данные о ценах от seven.io — цены на SMS для каждой сети в указанной стране или во всех странах. |
pricing.price | число (€) | Стоимость SMS для указанной страны — устанавливается только при указании кода страны. |
pricing.lastUpdate | нить | ISO-метка времени последнего запроса цен |
pricing.refresh | логический | Установить наtrue для немедленного обновления данных о ценах |
stats (30-дневный цикл)
Статистические данные всегда охватывают скользящее окно «сегодня – 30 дней → сегодня» . Они загружаются один раз при запуске адаптера и по ручному запуску — автоматического таймера обновления нет.
| Состояние | Тип | Описание |
|---|---|---|
stats.smsSent | число | Общее количество исходящих SMS-сообщений, отправленных за последние 30 дней. |
stats.voiceCalls | число | Общее количество голосовых звонков, совершенных за последние 30 дней. |
stats.inbound | число | Общее количество входящих SMS-сообщений, полученных за последние 30 дней. |
stats.totalCost | число | Общая стоимость в евро за последние 30 дней |
stats.lastUpdate | нить | ISO-метка времени последнего запроса статистики |
stats.json | строка (JSON) | Исходные аналитические данные, сгруппированные по дням. |
stats.refresh | логический | Установить наtrue для немедленного обновления статистики |
Входящие SMS
Для получения ответов на SMS-сообщения необходим цифровой отправитель — буквенно-цифровые имена (например,MyCompany ) не может напрямую получать ответы. У вас есть два варианта:
Вариант 1 — Общий бассейн (бесплатно, для тестирования и неинтенсивного использования)
ПроходитьgetReplies: true за сообщение (флажок Blockly илиsendTo() параметр). seven.io автоматически назначает временный номер общего пула в качестве отправителя, поэтому ответы работают даже с буквенно-цифровым идентификатором отправителя.
| Расходы | Бесплатно — взимается только стандартная плата за отправку SMS. |
| Окно ответа | 48 часов после отправки |
| Стабильность чисел | Повторная попытка подключения к тому же номеру в течение 2 недель не гарантируется. |
| Доступные страны | DE 🇩🇪 AT 🇦🇹 CH 🇨🇭 US 🇺🇸 PL 🇵🇱 |
| Подходит для | Тестирование, небольшие объемы, некритические уведомления. |
Вариант 2 — Собственный входящий номер (~20 евро в месяц)
Арендуйте виртуальный номер для входящих звонков прямо в панели управления seven.io. Ответы будут поступать надежно и постоянно.
| Расходы | ~20 евро в месяц |
| Окно ответа | Без ограничений |
| Стабильность чисел | Фиксированное, всегда одно и то же число |
| Доступные страны | Многие — проверьте панель управления seven.io |
| Подходит для | Постоянное общение с клиентами, использование в производстве. |
Настройте интервал опроса в параметрах адаптера. Установите значение
0чтобы отключить входящий опрос (например, если вы используете вебхуки).
Несколько сообщений за цикл: если между двумя опросами поступает несколько SMS-сообщений, адаптер обрабатывает их все — начиная с самых старых. Каждое сообщение вызывает отдельное изменение состояния.
sms.inbound.textТаким образом, каждое правило Blockly или автоматизация JavaScript, отслеживающая это состояние, срабатывает один раз для каждого сообщения. Точки данных всегда отражают самое последнее сообщение после цикла.
Блокли
После установки адаптера в категории sendTo редактора Blockly в ioBroker появляется готовый к использованию блок.
┌─ seven.io | SMS ☑ Voice call ☐ ─────────────┐
│ sender (optional) [ "" ] │
│ recipient [ "+491234567890" ] │
│ message [ "Alarm!" ] │
│ flash SMS ☐ replies (shared pool) ☐ │
│ ring time (s) 30 │
│ instance sevenio.0 ▼ │
└──────────────────────────────────────────────────┘
- Проверьте SMS , чтобы отправить текстовое сообщение.
- Проверьте голосовой вызов , чтобы запустить автоматический вызов с преобразованием текста в речь.
- Выберите оба варианта , чтобы одновременно отправить SMS и совершить звонок (параллельно, без дополнительной задержки).
- Ответы (общий пул) — если этот параметр включен, seven.io использует номер из общего пула в качестве отправителя, чтобы получатель мог ответить (см. Входящие SMS ).
- В поле ввода получателя принимается номер телефона или имя контакта из вашего списка контактов seven.io.
скрипт sendTo()
Все функции доступны черезsendTo() в JavaScript-адаптере.
Отправить SMS:
sendTo('sevenio.0', 'send', {
to: '+491234567890', // or a contact name: 'Max Mustermann'
text: 'Door opened!',
flash: false, // optional
getReplies: true, // optional — enable shared pool so recipient can reply
}, result => {
console.log(result.statusText); // e.g. 'Success'
});
Инициировать голосовой вызов:
sendTo('sevenio.0', 'voice', {
to: '+491234567890',
text: 'Attention! Motion detected in the garage.',
ringtime: 30, // optional, 5–60 s
});
Узнать баланс счета:
sendTo('sevenio.0', 'get_balance', {}, result => {
console.log(result.amount, result.currency);
});
Получить список контактов:
sendTo('sevenio.0', 'get_contacts', {}, contacts => {
console.log(JSON.stringify(contacts));
});
Создать контакт:
sendTo('sevenio.0', 'create_contact', {
name: 'Max Mustermann',
number: '491234567890', // without +
});
Тестовое SMS (отправьте тестовое сообщение для подтверждения ключа API):
sendTo('sevenio.0', 'test_sms', { to: '+491234567890' }, result => {
console.log(result.statusText);
});
Тестовый голосовой вызов:
sendTo('sevenio.0', 'test_voice', { to: '+491234567890' }, result => {
console.log(result);
});
Немедленно обновите статистику:
sendTo('sevenio.0', 'get_stats', {}, result => {
console.log(result); // raw analytics data
});
В качестве альтернативы, установитеsevenio.0.stats.refresh данные указывают наtrue — Адаптер получает новые статистические данные и сбрасывает состояние.false автоматически.
Отложенное SMS (запланированная доставка):
sendTo('sevenio.0', 'send', {
to: '+491234567890',
text: 'Good morning!',
delay: '2026-12-24 08:00:00', // ISO datetime or Unix timestamp (seconds)
}, result => {
console.log(result.statusText);
});
Онdelay Параметр передается напрямую в API seven.io. Используйте строку даты и времени в формате ISO (YYYY-MM-DD HH:MM:SS ) или метку времени Unix в секундах. Сообщение ставится в очередь seven.io и доставляется в указанное время.
коды состояния SMS
Онsms.lastStatus В состоянии содержится удобочитаемый перевод кода состояния seven.io:
| Код | Значение |
|---|---|
| 100 | Успех |
| 101 | Передача данных в SMS-центр не удалась. |
| 201 | Неверный номер получателя |
| 202 | Неверный идентификатор отправителя |
| 301 | Недостаточно кредитов |
| 403 | Отправитель внесен в черный список. |
| 500 | Неизвестная ошибка |
| 700 | Таймаут доставки по сети |
Changelog
0.1.2 (2026-07-22)
- (ipod86) Maintenance: fix io-package.json structure, improve CI and dependabot configuration
0.1.1 (2026-07-22)
- (ipod86) Fix: multiple inbound SMS per poll cycle now each trigger automations (processed oldest-first)
0.1.0 (2026-07-22)
- (ipod86) SMS sending via state, Blockly, and sendTo()
- (ipod86) Voice calls (TTS) via state, Blockly, and sendTo()
- (ipod86) Contact management — sync, create, send by name
- (ipod86) Inbound SMS polling with shared pool and own number support
- (ipod86) Delivery status check ~60 s after sending
- (ipod86) Account balance polling
- (ipod86) SMS pricing data with per-country price state
- (ipod86) Usage statistics (rolling 30-day window)
License
MIT License
Copyright (c) 2026 ipod86 david@graef.email
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.