1С заговорила - голосовой информатор через Skype

02.04.13

Интеграция - Мессенджеры и боты

Обработка в статье позволяет получить аудиофайл с речью, сгенерированной компьютером на основе текстовой строки, позвонить собеседнику через Skype и произнести его. Функциональность выполнена на основе .Net framework и API для Skype. Разработка будет полезна не только для серьезных бизнес-приложений, но и для домашних опытов и шуток друзьям. Для звонков на реальные номера потребуется пополненный баланс на Skype.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Обработка для 1С 8.2 (управляемые формы)
.epf 14,24Kb
48
48
1 SM
Скачать Купить за 1 850 руб.

Обработка для 1С в статье позволяет получить аудиофайл с речью, сгенерированной компьютером на основе текстовой строки, позвонить собеседнику через Skype и произнести его. Функциональность выполнена на основе .Net framework и API для Skype. Разработка будет полезна не только для серьезных бизнес-приложений, но и для домашних опытов и шуток друзьям. Для звонков на реальные номера потребуется пополненный баланс на Skype.

Предварительная настройка

Если не предусмотрен в системе русский голос, то его необходимо установить. По умолчанию Windows 7 может читать только английские тексты. Для русификации голоса нужно установить дополнительный русский голос. В Интернете удалось найти только голос ScanSoft Katerina Full 22kHz (до конца не понятна правовая возможность использования этого голоса). Многим может показаться голос медленным. Для его убыстрения необходимо сделать запись в реестре:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\ScanSoftKaterina_Full_22kHz]
"pp type"="email"

Скайп позволяет взаимодействовать с собой через библиотеку skype4COM.

Необходимо скачать эту библиотеку и выполнить ее регистрацию в реестре через regsvr32 skype4COM.dll. Для данной операции могут потребоваться права администратора.

После попытки использовать Skype в первый раз появится запрос в Skype’е. Нужно дать разрешение программе 1cv8c.exe на использование Skype. Контроль программ, имеющих доступ, можно выполнить через Настройки-Дополнительно-Расширенные настройки-Контроль доступа других программ к Skype.

Для доступа к .Net framework из 1С необходимо установить .Net Bridge. Сейчас последняя версия 4.0.4.

Описание кода C#

Код класса SkypeSpeech разделен на 2 части: генерация звука через класс SpeechSynthesizer и работа со Skype через SKYPE4COMLib.

Генерация звука:

SpeechSynthesizer reader = new SpeechSynthesizer();
if (!String.IsNullOrEmpty(voiceName))
{
    var voice = reader.GetInstalledVoices().Where(m => m.VoiceInfo.Name == voiceName).FirstOrDefault();
    if (voice != null)
        reader.SelectVoice(voiceName);
}

reader.SetOutputToWaveFile(tempFilePath, new SpeechAudioFormatInfo(
    16000,
    AudioBitsPerSample.Sixteen,
    AudioChannel.Mono
));

reader.Speak(text);
reader.SetOutputToNull();
reader.Dispose();

Особенности кода следующие. На вход в Skype нужно подать wav-файл с определенными параметрами, поэтому параметры устанавливаются явно. Для управления голосами SpeechSynthesizer используются методы GetInstalledVoices и SelectVoice.

Работа со Skype ведется через Skype4COM. В Сети есть много примеров, например: http://habrahabr.ru/post/139319/. Все примеры, какие я смотрел, отличаются, на мой взгляд, усложненной структурой: логика не умещается в один метод, а распределена между разными методами и событиями. Хотелось уместить всю логику в одну процедуру для наглядности.

Подключение к Skype. Второй параметр в skype.Attach заменен на true. Это значит, что скайп возвратит управление, когда произойдет подключение.

Skype skype = new Skype();
if (!skype.Client.IsRunning)
    skype.Client.Start(true, true);

skype.Attach(8, true);

Звонок через Skype:

Call call = skype.PlaceCall(target);
do
{
     if (call.Status == TCallStatus.clsBusy
        || call.Status == TCallStatus.clsCancelled
        || call.Status == TCallStatus.clsFailed)
        break;

    System.Threading.Thread.Sleep(1);
} while (call.Status != TCallStatus.clsInProgress);

if (call.Status != TCallStatus.clsInProgress)
    return;

Проигрывание звукового файла. Была предпринята попытка определять время звучания по времени, когда файл занят и не доступен для записи.

call.set_InputDevice(TCallIoDeviceType.callIoDeviceTypeFile, waveFilePath);
do
{
    System.Threading.Thread.Sleep(1000);
} while (IsBusy(waveFilePath));

Метод IsBusy выглядит так:

try
{
    using (FileStream stream = File.OpenWrite(filePath))
    {
        stream.Close();
        return false;
    }
}
catch (IOException)
{
    return true;
}

Описание кода 1С

Инициализация происходит в событии формы ПриОткрытии. Создание объекта .Net Bridge.

ПодключитьВнешнююКомпоненту("Elisy.NetBridge4");
AddIn = New("AddIn.ElisyNetBridge4");
net = AddIn.GetNet();

Загрузка сборки из GAC:

net.LoadAssembly("System.Speech, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");

Загрузка сборки из макета к обработке:

Макет = ПолучитьМакет("Elisy_SkypeSpeech_dll");
ДвоичныеДанные = Base64String(Макет);
assemblyBytes = net.CallStatic("System.Convert", "FromBase64String", ДвоичныеДанные);
net.CallStatic("System.Reflection.Assembly", "Load", assemblyBytes);

За генерацию звука и отправку голосового сообщения через Skype отвечает класс Elisy.SkypeSpeech.SkypeSpeech. Поэтому объект этого типа нужно создать для доступа к нему.

skypeSpeech = net.New("Elisy.SkypeSpeech.SkypeSpeech");

Команда генерации аудио-файла skypeSpeech.CreateSpeech. Первый параметр – имя файла с полным путем, второй параметр – текст сообщения. Третий параметр – имя голоса.

skypeSpeech.CreateSpeech(tempFilePath, Объект.Сообщение, "ScanSoft Katerina_Full_22kHz");

Команда отправки на Skype голосового сообщения skypeSpeech.SendAudioMessage. Первый параметр – номер телефона или имя Skype. Второй параметр – имя аудио-файла.

skypeSpeech.SendAudioMessage(Объект.НомерТелефона, tempFilePath);

Известные проблемы и их решения

Записанный аудиофайл произносит только слова, написанные латинскими буквами, например, Skype. Это означает, что не установлен в систему или не выбран необходимый русский голос. Его необходимо установить. Если это голос не ScanSoft Katerina Full 22kHz, то необходимо подправить вызов skypeSpeech.CreateSpeech(ПутьКФайлу, Объект.Сообщение, "ScanSoft Katerina_Full_22kHz") на нужное имя голоса.

При нажатии «Позвонить по Skype TargetInvokationException с сообщением «Retrieving the COM class factory for component with CLSID {830690FC-BF2F-47A6-AC2D-330BCB402664} failed due to the following error: 80040154 Класс не зарегистрирован (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).». Это означает, что должным образом не зарегистрирована библиотека для доступа к Skype skype4COM.dll. Ее нужно скачать и зарегистрировать с правами администратора через regsvr32 skype4COM.dll.

Что не реализовано

Обработка работает исходя из предположения, что передача голосового сообщения будет вестись стандартным образом: звонок – ответ – передача сообщения – завершение звонка. В текущей версии обработки нет анализа статуса: доставлено или не доставлено. Например, телефон у абонента может быть занят или абонент начал слушать сообщение и самостоятельно прервал разговор.

Пример полученного аудио-файла для ScanSoft Katerina_Full_22kHz: audio.wav (180,78 kb)

Пример полученного аудио-файла для RHVoice Elena (Russian): audio-rhvoice.wav (159,42 kb)

Пример полученного аудио-файла для RHVoice Aleksandr (Russian): audio-rhvoice-alexandr.wav (196,76 kb)

// //

См. также

Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Интеграция мессенджера WhatsApp и 1С: УНФ, УТ, КА, ERP - отправка и получение сообщений, картинок, файлов и видео прямо в 1С. Расширение работает с сервисом GreenApi.

15600 руб.

23.06.2023    8003    49    11    

27

SALE! 25%

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 1С:Конвертация данных Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 9900 руб.

27.12.2021    36784    98    161    

192

Мессенджеры и боты Программист Пользователь Платформа 1С v8.3 Платные (руб)

Мощный модуль для интеграции 1С с чат-ботами: Telegram, Viber, WhatsApp, WhatsApp Business, Instagram, ICQ, Facebook, Vkontakte, Skype, Одноклассники, Яндекс.Алиса, Avito а так же виджеты чата для сайтов: Verbox, Jivochat. Это универсальное и эффективное решение с большими возможностями, простым интерфейсом, наличием визуального конструктора, базовыми сценариями поведения из коробки, позволяющий запустить чат-ботов в течении 1-го дня.

65000 руб.

08.10.2019    60015    35    0    

157

SALE! 25%

Мессенджеры и боты Системный администратор Программист Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 Платные (руб)

Развитие популярного решения для интеграции мессенджера Telegram с нашей любимой 1С - конструктор чат-ботов в Телеграм.

15000 11250 руб.

18.06.2021    63909    307    272    

360

Документооборот и делопроизводство (СЭД) Мессенджеры и боты Учет документов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    29392    33    48    

67

Мессенджеры и боты SMS рассылки Платформа 1С v8.3 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Решение реализовано в виде расширения. Заменяет отправку смс на отправку в WhatsApp через Green-api. Отправка чека картинкой.

7800 руб.

15.05.2024    1214    3    6    

5

Мессенджеры и боты Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Управленческий учет Платные (руб)

Универсальная система сообщений для конфигураций 1С: Предприятие 8.3. Позволяет пользователям обмениваться текстовой информацией и ссылками на объекты (документы, справочники и др.). Система универсальна, подойдет для любой организации. Реализовано на управляемых формах (тонкий клиент) по технологии расширений 1С. Конфигурация останется на поддержке (для автоматического обновления).

4800 руб.

29.03.2021    16565    3    10    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. smilejka 32 16.01.13 11:59 Сейчас в теме
Читал утром на Хабре. Интересная вещь, нужно будет поизучать как работает. Спасибо!
2. Elisy 951 16.01.13 14:14 Сейчас в теме
(1) smilejka,
Читал утром на Хабре. Интересная вещь, нужно будет поизучать как работает. Спасибо!

На Хабре обсуждение что-то свелось к комментариям об 1С и ее месте в современном мире ))))))
3. smilejka 32 16.01.13 14:33 Сейчас в теме
(2)
Это да. Давно заметил, что на Хабре не любят 1С :)
4. Bukaska 140 16.01.13 14:40 Сейчас в теме
(3) smilejka, Я на том сайте когда нашла матюкальную статью про 1С, я долго смеялась пот столом.
5. Elisy 951 16.01.13 15:04 Сейчас в теме
(3) (4)
Я одно понять не могу, как можно рассуждать о чем-то, о недостатках архитектуры, если лично не знаком с предметом обсуждения? Стереотипы? ))))))) У 1С есть свои недостатки, но голословно тоже обвинять не стоит.
6. Bukaska 140 16.01.13 15:17 Сейчас в теме
Я не говорю про недостатки 1С. А про то как богат наш русский язык. А плюсы и недостатки есть везде. Просто нужно уметь пользоваться чем есть)
7. karakozov 21.01.13 08:49 Сейчас в теме
Не перестаю удивляться областями покрытия нашей замечательной 1С, появляются идеи, которые в конце-концов становятся частью нашего рабочего процесса.Пока не придумал что сделаю по данной методологии.Но автору твердое 5+.
8. Elisy 951 21.01.13 08:58 Сейчас в теме
Не перестаю удивляться областями покрытия нашей замечательной 1С, появляются идеи, которые в конце-концов становятся частью нашего рабочего процесса.Пока не придумал что сделаю по данной методологии.

Первое, что приходит на ум - это на кассе автоматически сказать покупателю: "К оплате 100 рублей, оплачено 40 рублей, сдача составила 60 рублей". В интернет-магазин можно экспортировать голосовое описание продукта и запускать его при открытии страницы.
Холодные звонки с рекламой что-то накладно выходят через Скайп, лучше поискать другое решение.
9. kuza_87 28 25.01.13 12:03 Сейчас в теме
С кассой - это хорошая мысль. Но ты представь каково будет кассиру весь день слушать монотонную речь из колонок. Через пару месяцев она так же будет разговаритвать))))))))Или в дурдом угодит
10. Elisy 951 25.01.13 12:54 Сейчас в теме
(9) kuza_87,
Это точно ))))) кассиру не позавидуешь. Можно чередовать голоса и опцию выставить - для покупателей-мужчин произносить женским голосом, а для покупательниц - мужским
11. Raminus 25.01.13 13:59 Сейчас в теме
На самом деле, отличная задумка, где-то видел нечто похожее по функционалу... какая то WMS система (может быть 1С Логистика или Адресный склад), девушка информировала о поступлении заказа на сборку, в общем забавно:), придумать можно много применений было бы желание.
12. antares_of 11 25.01.13 14:34 Сейчас в теме
Интересная идея. Получать оповещения в виде голосовых сообщений может быть востребовано во многих ситуациях. Особенно когда находишься не перед компьютером, а информацию нужно получить оперативно и не как сигнал, а с подробной информацией из первых уст!)
13. maverick76 11 16.02.13 02:07 Сейчас в теме
Думаю пригодиться...интересно
14. VictorK 03.04.13 19:52 Сейчас в теме
Очень полезная идея для информирования ответственных лиц организации о сроках оплаты или о важных датах, таких как сдача отчетности , ..., о днях рождения сотрудников.
15. lelusha 09.02.14 17:50 Сейчас в теме
Голосовые оповещения очень полезны и это востребовано. особенно когда пользователи не обращают внимание на простые предупреждения и сообщения. Автору +1
Оставьте свое сообщение