seven.io SMS и связь

Адаптер ioBroker для API seven.io. Отправка SMS, поиск телефонных номеров, управление контактами и группами, использование голосовых сервисов и мониторинг информации об учетных записях.

Текущий релиз
0.1.2
Разработчик
ipod86
Лицензия
MIT

Адаптер 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.