mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-18 17:41:53 +00:00
merge MODAPP-38
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6029 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
95f1060e8b
commit
8767bfbb7c
@ -29,6 +29,20 @@
|
|||||||
<param name="restart-key" value="1"/>
|
<param name="restart-key" value="1"/>
|
||||||
<param name="ff-key" value="6"/>
|
<param name="ff-key" value="6"/>
|
||||||
<param name="rew-key" value="4"/>
|
<param name="rew-key" value="4"/>
|
||||||
|
<email>
|
||||||
|
<body><![CDATA[At ${voicemail_time} you were left a message from ${voicemail_caller_id_name} ${voicemail_caller_id_number}
|
||||||
|
to your account ${voicemail_account}@${voicemail_domain}
|
||||||
|
]]></body>
|
||||||
|
<headers><![CDATA[From: FreeSWITCH mod_voicemail <${voicemail_account}@${voicemail_domain}>
|
||||||
|
To: <${voicemail_email}>
|
||||||
|
Subject: Voicemail from ${voicemail_caller_id_name} ${voicemail_caller_id_number}
|
||||||
|
X-Priority: ${voicemail_priority}
|
||||||
|
X-Mailer: FreeSWITCH
|
||||||
|
]]></headers>
|
||||||
|
<!-- this is the format voicemail_time will have -->
|
||||||
|
<param name="date-fmt" value="%A, %B %d %Y, %I %M %p"/>
|
||||||
|
<param name="email-from" value="${voicemail_account}@${voicemail_domain}"/>
|
||||||
|
</email>
|
||||||
<!--<param name="storage-dir" value="/tmp"/>-->
|
<!--<param name="storage-dir" value="/tmp"/>-->
|
||||||
<!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
|
<!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
|
||||||
</profile>
|
</profile>
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
*
|
*
|
||||||
* Anthony Minessale II <anthmct@yahoo.com>
|
* Anthony Minessale II <anthmct@yahoo.com>
|
||||||
*
|
* Bret McDanel <trixter AT 0xdecafbad.com>
|
||||||
*
|
*
|
||||||
* mod_voicemail.c -- Voicemail Module
|
* mod_voicemail.c -- Voicemail Module
|
||||||
*
|
*
|
||||||
@ -83,6 +83,10 @@ struct vm_profile {
|
|||||||
char *storage_dir;
|
char *storage_dir;
|
||||||
char *callback_dialplan;
|
char *callback_dialplan;
|
||||||
char *callback_context;
|
char *callback_context;
|
||||||
|
char *email_body;
|
||||||
|
char *email_headers;
|
||||||
|
char *email_from;
|
||||||
|
char *date_fmt;
|
||||||
uint32_t digit_timeout;
|
uint32_t digit_timeout;
|
||||||
uint32_t max_login_attempts;
|
uint32_t max_login_attempts;
|
||||||
uint32_t max_record_len;
|
uint32_t max_record_len;
|
||||||
@ -229,7 +233,7 @@ static switch_status_t load_config(void)
|
|||||||
{
|
{
|
||||||
char *cf = "voicemail.conf";
|
char *cf = "voicemail.conf";
|
||||||
vm_profile_t *profile = NULL;
|
vm_profile_t *profile = NULL;
|
||||||
switch_xml_t cfg, xml, settings, param, x_profile, x_profiles;
|
switch_xml_t cfg, xml, settings, param, x_profile, x_profiles, x_email;
|
||||||
|
|
||||||
memset(&globals, 0, sizeof(globals));
|
memset(&globals, 0, sizeof(globals));
|
||||||
switch_core_new_memory_pool(&globals.pool);
|
switch_core_new_memory_pool(&globals.pool);
|
||||||
@ -285,11 +289,41 @@ static switch_status_t load_config(void)
|
|||||||
char *storage_dir = "";
|
char *storage_dir = "";
|
||||||
char *callback_dialplan = "XML";
|
char *callback_dialplan = "XML";
|
||||||
char *callback_context = "default";
|
char *callback_context = "default";
|
||||||
|
char *email_body = "";
|
||||||
|
char *email_headers = "";
|
||||||
|
char *email_from = "";
|
||||||
|
char *date_fmt = "%A, %B %d %Y, %I %M %p";
|
||||||
|
|
||||||
switch_core_db_t *db;
|
switch_core_db_t *db;
|
||||||
uint32_t timeout = 10000, max_login_attempts = 3, max_record_len = 300;
|
uint32_t timeout = 10000, max_login_attempts = 3, max_record_len = 300;
|
||||||
|
|
||||||
db = NULL;
|
db = NULL;
|
||||||
|
|
||||||
|
if ((x_email = switch_xml_child(x_profile, "email"))) {
|
||||||
|
if ((param = switch_xml_child(x_email,"body"))) {
|
||||||
|
email_body = switch_core_strdup(globals.pool,param->txt);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((param = switch_xml_child(x_email,"headers"))) {
|
||||||
|
email_headers = switch_core_strdup(globals.pool,param->txt);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (param = switch_xml_child(x_email, "param"); param; param = param->next) {
|
||||||
|
char *var, *val;
|
||||||
|
|
||||||
|
var = (char *) switch_xml_attr_soft(param, "name");
|
||||||
|
val = (char *) switch_xml_attr_soft(param, "value");
|
||||||
|
|
||||||
|
if (!strcasecmp(var, "date-fmt") && !switch_strlen_zero(val)) {
|
||||||
|
date_fmt = val;
|
||||||
|
} else if (!strcasecmp(var, "email-from") && !switch_strlen_zero(val)) {
|
||||||
|
email_from = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for (param = switch_xml_child(x_profile, "param"); param; param = param->next) {
|
for (param = switch_xml_child(x_profile, "param"); param; param = param->next) {
|
||||||
char *var, *val;
|
char *var, *val;
|
||||||
|
|
||||||
@ -430,6 +464,11 @@ static switch_status_t load_config(void)
|
|||||||
#ifdef SWITCH_HAVE_ODBC
|
#ifdef SWITCH_HAVE_ODBC
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
profile->email_body = email_body;
|
||||||
|
profile->email_headers = email_headers;
|
||||||
|
profile->email_from = email_from;
|
||||||
|
profile->date_fmt = date_fmt;
|
||||||
|
|
||||||
profile->digit_timeout = timeout;
|
profile->digit_timeout = timeout;
|
||||||
profile->max_login_attempts = max_login_attempts;
|
profile->max_login_attempts = max_login_attempts;
|
||||||
profile->max_record_len = max_record_len;
|
profile->max_record_len = max_record_len;
|
||||||
@ -833,6 +872,55 @@ static int listen_callback(void *pArg, int argc, char **argv, char **columnNames
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void message_count(vm_profile_t *profile, char *myid, char *domain_name, char *myfolder,
|
||||||
|
int *total_new_messages, int *total_saved_messages, int *total_new_urgent_messages, int *total_saved_urgent_messages)
|
||||||
|
{
|
||||||
|
char msg_count[80] = "";
|
||||||
|
callback_t cbt = { 0 };
|
||||||
|
char sql[256];
|
||||||
|
|
||||||
|
cbt.buf = msg_count;
|
||||||
|
cbt.len = sizeof(msg_count);
|
||||||
|
|
||||||
|
|
||||||
|
snprintf(sql, sizeof(sql),
|
||||||
|
"select count(*) from voicemail_data where user='%s' and domain='%s' and in_folder='%s' and read_epoch=0",
|
||||||
|
myid,
|
||||||
|
domain_name,
|
||||||
|
myfolder);
|
||||||
|
vm_execute_sql_callback(profile, profile->mutex, sql, sql2str_callback, &cbt);
|
||||||
|
*total_new_messages = atoi(msg_count);
|
||||||
|
|
||||||
|
snprintf(sql, sizeof(sql),
|
||||||
|
"select count(*) from voicemail_data where user='%s' and domain='%s' and in_folder='%s' and read_epoch=0 and read_flags='%s'",
|
||||||
|
myid,
|
||||||
|
domain_name,
|
||||||
|
myfolder,
|
||||||
|
URGENT_FLAG_STRING);
|
||||||
|
vm_execute_sql_callback(profile, profile->mutex, sql, sql2str_callback, &cbt);
|
||||||
|
*total_new_urgent_messages = atoi(msg_count);
|
||||||
|
|
||||||
|
snprintf(sql, sizeof(sql),
|
||||||
|
"select count(*) from voicemail_data where user='%s' and domain='%s' and in_folder='%s' and read_epoch!=0",
|
||||||
|
myid,
|
||||||
|
domain_name,
|
||||||
|
myfolder);
|
||||||
|
vm_execute_sql_callback(profile, profile->mutex, sql, sql2str_callback, &cbt);
|
||||||
|
*total_saved_messages = atoi(msg_count);
|
||||||
|
|
||||||
|
|
||||||
|
snprintf(sql, sizeof(sql),
|
||||||
|
"select count(*) from voicemail_data where user='%s' and domain='%s' and in_folder='%s' and read_epoch!=0 and read_flags='%s'",
|
||||||
|
myid,
|
||||||
|
domain_name,
|
||||||
|
myfolder,
|
||||||
|
URGENT_FLAG_STRING);
|
||||||
|
vm_execute_sql_callback(profile, profile->mutex, sql, sql2str_callback, &cbt);
|
||||||
|
*total_saved_urgent_messages = atoi(msg_count);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static switch_status_t listen_file(switch_core_session_t *session, vm_profile_t *profile, listen_callback_t *cbt)
|
static switch_status_t listen_file(switch_core_session_t *session, vm_profile_t *profile, listen_callback_t *cbt)
|
||||||
{
|
{
|
||||||
switch_channel_t *channel;
|
switch_channel_t *channel;
|
||||||
@ -900,28 +988,81 @@ static switch_status_t listen_file(switch_core_session_t *session, vm_profile_t
|
|||||||
switch_safe_free(sql);
|
switch_safe_free(sql);
|
||||||
if (!strcmp(input, profile->email_key) && !switch_strlen_zero(cbt->email)) {
|
if (!strcmp(input, profile->email_key) && !switch_strlen_zero(cbt->email)) {
|
||||||
switch_event_t *event;
|
switch_event_t *event;
|
||||||
char *from = switch_core_session_sprintf(session, "%s@%s", cbt->user, cbt->domain);
|
char *from;
|
||||||
char *headers;
|
char *headers;
|
||||||
char *body;
|
char *body;
|
||||||
int priority = 3;
|
int priority = 3;
|
||||||
|
switch_size_t retsize;
|
||||||
|
switch_time_exp_t tm;
|
||||||
|
char date[80] = "";
|
||||||
|
char tmp[50]="";
|
||||||
|
int total_new_messages = 0;
|
||||||
|
int total_saved_messages = 0;
|
||||||
|
int total_new_urgent_messages = 0;
|
||||||
|
int total_saved_urgent_messages = 0;
|
||||||
|
|
||||||
if (!strcasecmp(cbt->read_flags, URGENT_FLAG_STRING)) {
|
if (!strcasecmp(cbt->read_flags, URGENT_FLAG_STRING)) {
|
||||||
priority = 1;
|
priority = 1;
|
||||||
}
|
}
|
||||||
headers = switch_core_session_sprintf(session,
|
|
||||||
"From: FreeSWITCH mod_voicemail <%s@%s>\nSubject: Voicemail from %s %s\nX-Priority: %d",
|
|
||||||
cbt->user, cbt->domain, cbt->cid_name, cbt->cid_number, priority);
|
message_count(profile, cbt->user, cbt->domain, cbt->in_folder, &total_new_messages, &total_saved_messages,
|
||||||
|
&total_new_urgent_messages, &total_saved_urgent_messages);
|
||||||
if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
|
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Type", "forwarded-voicemail");
|
switch_time_exp_lt(&tm, atoi(cbt->created_epoch));
|
||||||
switch_event_serialize(event, &body);
|
switch_strftime(date, &retsize, sizeof(date), profile->date_fmt, &tm);
|
||||||
switch_event_fire(&event);
|
|
||||||
|
snprintf(tmp,sizeof(tmp), "%d", total_new_messages);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_total_new_messages", tmp);
|
||||||
|
snprintf(tmp,sizeof(tmp), "%d", total_saved_messages);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_total_saved_messages", tmp);
|
||||||
|
snprintf(tmp,sizeof(tmp), "%d", total_new_urgent_messages);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_urgent_new_messages", tmp);
|
||||||
|
snprintf(tmp,sizeof(tmp), "%d", total_saved_urgent_messages);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_urgent_saved_messages", tmp);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_current_folder", cbt->in_folder);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_account", cbt->user);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_domain", cbt->domain);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_caller_id_number", cbt->cid_number);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_caller_id_name", cbt->cid_name);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_file_path", cbt->file_path);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_read_flags", cbt->read_flags);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_time", date);
|
||||||
|
snprintf(tmp,sizeof(tmp), "%d", priority);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_priority", tmp);
|
||||||
|
|
||||||
|
|
||||||
|
if(switch_strlen_zero(profile->email_headers)) {
|
||||||
|
from = switch_core_session_sprintf(session, "%s@%s", cbt->user, cbt->domain);
|
||||||
} else {
|
} else {
|
||||||
body = switch_mprintf("Voicemail from %s %s",
|
from = switch_channel_expand_variables(channel,profile->email_from);
|
||||||
cbt->cid_name, cbt->cid_number);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//TBD add better formatting to the body
|
if(switch_strlen_zero(profile->email_headers)) {
|
||||||
|
headers = switch_core_session_sprintf(session,
|
||||||
|
"From: FreeSWITCH mod_voicemail <%s@%s>\nSubject: Voicemail from %s %s\nX-Priority: %d",
|
||||||
|
cbt->user, cbt->domain, cbt->cid_name, cbt->cid_number, priority);
|
||||||
|
} else {
|
||||||
|
headers = switch_channel_expand_variables(channel,profile->email_headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
|
||||||
|
/* this isnt done? it was in the other place
|
||||||
|
* switch_channel_event_set_data(channel, event);
|
||||||
|
*/
|
||||||
|
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Type", "forwarded-voicemail");
|
||||||
|
switch_event_fire(&event);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!switch_strlen_zero(profile->email_headers)) {
|
||||||
|
body = switch_mprintf("Voicemail from %s %s",
|
||||||
|
cbt->cid_name, cbt->cid_number);
|
||||||
|
} else {
|
||||||
|
body = switch_channel_expand_variables(channel,profile->email_body);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TBD add better formatting to the body -- TRX done :)
|
||||||
switch_simple_email(cbt->email, from, headers, body, cbt->file_path);
|
switch_simple_email(cbt->email, from, headers, body, cbt->file_path);
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending message to %s\n", cbt->email);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending message to %s\n", cbt->email);
|
||||||
switch_safe_free(body);
|
switch_safe_free(body);
|
||||||
@ -943,55 +1084,6 @@ static switch_status_t listen_file(switch_core_session_t *session, vm_profile_t
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void message_count(vm_profile_t *profile, char *myid, char *domain_name, char *myfolder,
|
|
||||||
int *total_new_messages, int *total_saved_messages, int *total_new_urgent_messages, int *total_saved_urgent_messages)
|
|
||||||
{
|
|
||||||
char msg_count[80] = "";
|
|
||||||
callback_t cbt = { 0 };
|
|
||||||
char sql[256];
|
|
||||||
|
|
||||||
cbt.buf = msg_count;
|
|
||||||
cbt.len = sizeof(msg_count);
|
|
||||||
|
|
||||||
|
|
||||||
snprintf(sql, sizeof(sql),
|
|
||||||
"select count(*) from voicemail_data where user='%s' and domain='%s' and in_folder='%s' and read_epoch=0",
|
|
||||||
myid,
|
|
||||||
domain_name,
|
|
||||||
myfolder);
|
|
||||||
vm_execute_sql_callback(profile, profile->mutex, sql, sql2str_callback, &cbt);
|
|
||||||
*total_new_messages = atoi(msg_count);
|
|
||||||
|
|
||||||
snprintf(sql, sizeof(sql),
|
|
||||||
"select count(*) from voicemail_data where user='%s' and domain='%s' and in_folder='%s' and read_epoch=0 and read_flags='%s'",
|
|
||||||
myid,
|
|
||||||
domain_name,
|
|
||||||
myfolder,
|
|
||||||
URGENT_FLAG_STRING);
|
|
||||||
vm_execute_sql_callback(profile, profile->mutex, sql, sql2str_callback, &cbt);
|
|
||||||
*total_new_urgent_messages = atoi(msg_count);
|
|
||||||
|
|
||||||
snprintf(sql, sizeof(sql),
|
|
||||||
"select count(*) from voicemail_data where user='%s' and domain='%s' and in_folder='%s' and read_epoch!=0",
|
|
||||||
myid,
|
|
||||||
domain_name,
|
|
||||||
myfolder);
|
|
||||||
vm_execute_sql_callback(profile, profile->mutex, sql, sql2str_callback, &cbt);
|
|
||||||
*total_saved_messages = atoi(msg_count);
|
|
||||||
|
|
||||||
|
|
||||||
snprintf(sql, sizeof(sql),
|
|
||||||
"select count(*) from voicemail_data where user='%s' and domain='%s' and in_folder='%s' and read_epoch!=0 and read_flags='%s'",
|
|
||||||
myid,
|
|
||||||
domain_name,
|
|
||||||
myfolder,
|
|
||||||
URGENT_FLAG_STRING);
|
|
||||||
vm_execute_sql_callback(profile, profile->mutex, sql, sql2str_callback, &cbt);
|
|
||||||
*total_saved_urgent_messages = atoi(msg_count);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void voicemail_check_main(switch_core_session_t *session, char *profile_name, char *domain_name, char *id, int auth)
|
static void voicemail_check_main(switch_core_session_t *session, char *profile_name, char *domain_name, char *id, int auth)
|
||||||
{
|
{
|
||||||
vm_check_state_t vm_check_state = VM_CHECK_START;
|
vm_check_state_t vm_check_state = VM_CHECK_START;
|
||||||
@ -1313,11 +1405,6 @@ static void voicemail_check_main(switch_core_session_t *session, char *profile_n
|
|||||||
if (!x_user) {
|
if (!x_user) {
|
||||||
char *xtra;
|
char *xtra;
|
||||||
int ok = 1;
|
int ok = 1;
|
||||||
/* TRX added destination_number and caller_id_number from the session object
|
|
||||||
* ideally switch_xml_* would do this for any curl request, but that can get tricky
|
|
||||||
* since curl & the session object arent always present, I will eventually look at it
|
|
||||||
* and see what it would take to make it automagically do that
|
|
||||||
*/
|
|
||||||
caller_profile = switch_channel_get_caller_profile(channel);
|
caller_profile = switch_channel_get_caller_profile(channel);
|
||||||
xtra = switch_mprintf("mailbox=%s&destination_number=%s&caller_id_number=%s", myid,caller_profile->destination_number,caller_profile->caller_id_number);
|
xtra = switch_mprintf("mailbox=%s&destination_number=%s&caller_id_number=%s", myid,caller_profile->destination_number,caller_profile->caller_id_number);
|
||||||
|
|
||||||
@ -1505,7 +1592,7 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, char
|
|||||||
if (!strcasecmp(var, "vm-mailto")) {
|
if (!strcasecmp(var, "vm-mailto")) {
|
||||||
email_vm = switch_core_session_strdup(session, val);
|
email_vm = switch_core_session_strdup(session, val);
|
||||||
} else if (!strcasecmp(var, "vm-email-all-messages")) {
|
} else if (!strcasecmp(var, "vm-email-all-messages")) {
|
||||||
send_mail = switch_true(var);
|
send_mail = switch_true(val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1600,32 +1687,80 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, char
|
|||||||
}
|
}
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
|
||||||
|
|
||||||
if (send_mail && !switch_strlen_zero(email_vm)) {
|
if (send_mail && !switch_strlen_zero(email_vm)) {
|
||||||
switch_event_t *event;
|
switch_event_t *event;
|
||||||
char *from = switch_core_session_sprintf(session, "%s@%s", id, domain_name);
|
char *from;
|
||||||
char *body;
|
char *body;
|
||||||
char *headers;
|
char *headers;
|
||||||
|
switch_size_t retsize;
|
||||||
headers = switch_core_session_sprintf(session, "From: FreeSWITCH mod_voicemail <%s@%s>\nSubject: Voicemail from %s %s\nX-Priority: %d",
|
switch_time_exp_t tm;
|
||||||
id, domain_name,
|
char date[80] = "";
|
||||||
caller_profile->caller_id_name,
|
char tmp[50]="";
|
||||||
caller_profile->caller_id_number,
|
int total_new_messages = 0;
|
||||||
priority);
|
int total_saved_messages = 0;
|
||||||
|
int total_new_urgent_messages = 0;
|
||||||
|
int total_saved_urgent_messages = 0;
|
||||||
|
|
||||||
|
message_count(profile, id, domain_name, myfolder, &total_new_messages, &total_saved_messages,
|
||||||
|
&total_new_urgent_messages, &total_saved_urgent_messages);
|
||||||
|
|
||||||
|
switch_time_exp_lt(&tm, switch_time_now());
|
||||||
|
switch_strftime(date, &retsize, sizeof(date), profile->date_fmt, &tm);
|
||||||
|
|
||||||
|
switch_channel_set_variable(channel, "voicemail_current_folder", myfolder);
|
||||||
|
snprintf(tmp,sizeof(tmp), "%d", total_new_messages);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_total_new_messages", tmp);
|
||||||
|
snprintf(tmp,sizeof(tmp), "%d", total_saved_messages);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_total_saved_messages", tmp);
|
||||||
|
snprintf(tmp,sizeof(tmp), "%d", total_new_urgent_messages);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_urgent_new_messages", tmp);
|
||||||
|
snprintf(tmp,sizeof(tmp), "%d", total_saved_urgent_messages);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_urgent_saved_messages", tmp);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_account", id);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_domain", domain_name);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_caller_id_number", caller_profile->caller_id_number);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_caller_id_name", caller_profile->caller_id_name);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_file_path", file_path);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_read_flags", read_flags);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_time", date);
|
||||||
|
snprintf(tmp,sizeof(tmp), "%d", priority);
|
||||||
|
switch_channel_set_variable(channel, "voicemail_priority", tmp);
|
||||||
|
|
||||||
|
|
||||||
|
if(switch_strlen_zero(profile->email_from)) {
|
||||||
|
from = switch_core_session_sprintf(session, "%s@%s", id, domain_name);
|
||||||
|
} else {
|
||||||
|
from = switch_channel_expand_variables(channel, profile->email_headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(switch_strlen_zero(profile->email_headers)) {
|
||||||
|
headers = switch_core_session_sprintf(session, "From: FreeSWITCH mod_voicemail <%s@%s>\nSubject: Voicemail from %s %s\nX-Priority: %d",
|
||||||
|
id, domain_name,
|
||||||
|
caller_profile->caller_id_name,
|
||||||
|
caller_profile->caller_id_number,
|
||||||
|
priority);
|
||||||
|
} else {
|
||||||
|
headers = switch_channel_expand_variables(channel,profile->email_headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
|
if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
|
||||||
switch_channel_event_set_data(channel, event);
|
switch_channel_event_set_data(channel, event);
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Type", "voicemail");
|
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Type", "voicemail");
|
||||||
switch_event_serialize(event, &body);
|
|
||||||
switch_event_fire(&event);
|
switch_event_fire(&event);
|
||||||
} else {
|
}
|
||||||
|
if(!switch_strlen_zero(profile->email_headers)) {
|
||||||
body = switch_mprintf("Voicemail from %s %s",
|
body = switch_mprintf("Voicemail from %s %s",
|
||||||
caller_profile->caller_id_name, caller_profile->caller_id_number);
|
caller_profile->caller_id_name, caller_profile->caller_id_number);
|
||||||
|
} else {
|
||||||
|
body = switch_channel_expand_variables(channel,profile->email_body);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TBD add better formatting to the body
|
//TBD add better formatting to the body -- TRX done :)
|
||||||
switch_simple_email(email_vm, from, headers, body, file_path);
|
switch_simple_email(email_vm, from, headers, body, file_path);
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending message to %s\n", email_vm);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending message to %s\n", email_vm);
|
||||||
switch_safe_free(body);
|
switch_safe_free(body);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user