Verbinden 2er Channels

helkatz

Neuer User
Mitglied seit
28 Apr 2008
Beiträge
14
Punkte für Reaktionen
0
Punkte
0
Hallo
Ich suche nach einer Möglichkeit 2 Channels miteinander zu verbinden konnte in den Foren diesbezüglich nichts finden. Ich habe folgenden Ablauf

Ein Call kommt rein dieser startet ein agi script
Anrufer hört ein Voicefile danach eine Warteschleife während der Warteschleife soll zu einem externen Telefon (Agent) z.B über ein callfile gewählt werden.
Wenn dieser Agent abhebt werden dem ebenfals Infofiles vorgespielt und ggf eine Eingabe per DTMF abverlangt danach möchte ich den Inbound und Outbound Channel verbinden

Hoffe ihr könnt mir helfen
Helmut
 
Der erste anrufer landet in einer leeren Konferenz (ohne Ansage-Optionen und mit Musik) - er hat das Gefühl in einer warteschleife zu sein (vor dem eintritt in die Konf kann auch noch ne Meldung abgespielt werden).

Das AGI startet ein Callfile, was den anderen anruft und mit einer internen extension verbindet, in dieser extension wird ebenfalls ein menü abgespielt und wenn der andere will, kann er sich zu dem wartenden anrufer "verbinden", indem er in seine konferenz wechselt. Dazu muss dem callfile als parameter die konferenznummer mitgegeben werden, damit das alles schön automatisch funktioniert.
 
danke mal für eure antworten nur konferenzen kommen nicht in frage wegen der qualität hab ich schon probiert ist nicht das selbe wie eine bridge hab mir jetzt im asterisk eine bridge funktion implementiert mit der klappts jetzt mal

Helmut
 
Nun würde uns natürlich noch brennend interessieren, wie Du die Bridge-Funktion implementiert hast.
 
hab die function bei mir als app registreirt
funktioniert bei mir bis jetzt problemlos ich verwende die halt in einer c++ applikation welche via astmanager kommuniziert

Code:
static char *bridge_app = "Bridge";

static char *bridge_synopsis = "Bridges two channels";

static char *bridge_descrip =
"  Bridge(Channel1 Channel2)\n";

static int bridge_exec(struct ast_channel *chan, void *data)
{

	AST_DECLARE_APP_ARGS(args,
			     AST_APP_ARG(peer);
	);

	if (ast_strlen_zero(data)) {
		ast_log(LOG_WARNING, "Bridge requires an argument (Peer)\n");
		return -1;
	}

	//u = ast_module_user_add(chan);

	char *parse = ast_strdupa(data);
	struct ast_bridge_config config;
	AST_STANDARD_APP_ARGS(args, parse);
	struct ast_channel *peer = ast_get_channel_by_name_locked(args.peer);
	if(!peer)
		return -1;
	ast_channel_unlock(peer);
	memset(&config,0,sizeof(struct ast_bridge_config));
	int peerflags = 0;

	/* Be sure no generators are left on it */
	ast_deactivate_generator(chan);
	/* Make sure channels are compatible */
	int res = ast_channel_make_compatible(chan, peer);
	if (res < 0) {
		ast_log(LOG_WARNING, "Had to drop call because I couldn't make %s compatible with %s\n", chan->name, peer->name);
		//ast_hangup(peer);
		//res = -1;
		return -1;
	}
	res = ast_bridge_call(chan,peer,&config);
	ast_verbose(VERBOSE_PREFIX_3 "bridges c1=%p c2=%p\n", chan, peer);
	return 0;
}
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.