Из небольшой предоставленной вами информации и предположения, что ваши функции вызываются с помощью ejabberd offline_message_hook Я, по крайней мере, могу найти проблему.В
osReturn = os:cmd("/opt/ejabberd-2.1.10/newmods/handleoffline.py " ++ To)
вы пытаетесь использовать ++ для объединения списка, который вы предоставили с To .Но главная проблема в том, что To не является строкой (списком), и это порождает вашу ошибку.Ваша функция имеет вид
on_offline(From, To, Packet) -> ok
, где К = С = # jid (см. jlib )
один из способов исправить это использовать
on_offline(_From, To=#jid{user = User, server=Server}, _Packet) ->
...
OsReturn = os:cmd("/opt/ejabberd-2.1.10/newmods/handleoffline.py " ++ User),
?INFO_MSG("Send to handler and got return ~s", [OsReturn]),
none.
, потому что поле user on # jid является строкой.
Редактировать: другая ошибка заключается в том, что вам нужно изменить osReturn на OsReturn, потому что первый является атомом и вызовет ошибку в вашем коде, как selle указал
Отредактируйте свой вопрос и добавьте больше информации, если у вас есть больше проблем, или чтобы прояснить этот вопрос.