Подтвердить что ты не робот

IPhone, позвоните по другому номеру телефона в ответ на первый ответ?

Я пытаюсь создать приложение, которое инициирует обращение к контакту с приоритетом 1 в списке, подобном колл-центру.

Затем, если этот контакт не отвечает (позвольте забыть всю проблему автоответчиков здесь), я бы хотел вызвать контакт с приоритетом 2 и так далее, пока один из них не ответит, или я не исчерпаю свой список.

Возможно ли это?

Я пробовал следующее:

  • Подключитесь к событию CTCallCenter.CallEventHandler и проверьте состояние вызова для CTCallStateConnected и CTCallStateDisconnected, и я получаю его, чтобы ответить на тот факт, что вызов отключен, не подключаясь, а затем попытаться инициировать другой вызов как я сделал первый, но эта вторая попытка просто сидит в воде.
  • Переопределите метод DidEnterBackground и периодически проверяйте свойство CTCall.CallState, в основном снова пытающееся ответить на отключенное соединение, которое никогда не было подключено, но это не работает либо

Я также попытался добавить короткую задержку (1 секунду, 2,5 секунды и 10 секунд) после обнаружения отключенного состояния перед тем, как попытаться сделать следующий диск, чтобы телефонное приложение "успокоилось" после прерывания вызова, это не изменить что-нибудь.

4b9b3361

Ответ 1

Я считаю, что это лучше решить в пункте назначения телефонного звонка. Я бы либо попросил телефонную компанию настроить "следовать за мной", использовать Twilio или какой-либо другой сторонний сервис (как уже было предложено) или настроить мою собственную УАТС, используя что-то вроде Asterisk (Asterisk включает в себя возможность настройки типа "следовать за мной" ). Это обеспечивает вам большую гибкость и контроль, даже если вы нашли способ сделать это изначально в iOS.

Сказав это, я получил это, чтобы работать в iOS, предполагая следующее:

  • Ваше приложение инициирует вызов.
  • Открывается телефонное приложение, набирает номер и отключается.
  • Пользователь явно возвращается в ваше приложение. Если вам удалось получить информацию о событиях во время вашего приложения, я хочу узнать больше: -).
  • При возврате управления вашему приложению события телефона отправляются и инициируется новый вызов.

У меня есть следующий фрагмент кода в моем методе UIApplicationDelegate didFinishLaunchingWithOptions:

// In appdelegate header, ct is declared as @property (strong, nonatomic) CTCallCenter *ct; 
self.ct = [[CTCallCenter alloc] init];
self.ct.callEventHandler = ^(CTCall *call) {
    if (call.callState == CTCallStateConnected) {
        // do some state management to track the call
    } else if (call.callState == CTCallStateDisconnected) {
        // check that this is the expected call and setup the
        // new phone number
        NSURL *telURL = [NSURL URLWithString:myNewNumberURL];
        [application openURL:telURL];    
    }     
};

Это вызовет новый вызов. Я использую IOS 5 SDK; протестирован на iPhone 4s.

ИЗМЕНИТЬ

Использование В качестве отправной точки для возврата в поведение приложения после разговора по телефону в собственном коде, чем UIWebView, мне удалось заставить это работать. Обратите внимание, что для ясности я отслеживал управление памятью. Предполагая, что вы используете технику веб-просмотра для возврата в приложение после завершения вызова, попробуйте что-то подобное в завершенном блоке:

else if (call.callState == CTCallStateDisconnected) {
    // check that this is the expected call and setup the
    // new phone number
    NSURL *telURL = [NSURL URLWithString:myNewNumberURL];
    dispatch_async(dispatch_get_main_queue(), ^{
        UIWebView *callWebview = [[UIWebView alloc] init]  ;
        [self.window.rootViewController.view addSubview:callWebview];
        [callWebview loadRequest:[NSURLRequest requestWithURL:telURL]]; 
        // and now callWebView sits around until the app is killed....so don't follow this to the letter.  
    });
}

Однако это может не совсем дать вам то, что вы хотите. Пользователь будет получать оповещение по каждому запросу, предоставляя возможность отменить вызов.

Ответ 2

Вы можете использовать http://labs.twilio.com/twimlets/findme. Вы могли бы назвать приложение номером Twilio, и он мог бы использовать findme для вызова всех номеров в порядке.

Ответ 3

Я не смотрел на него глубже, но SDK Deutsche Telekom может содержать то, что вы ищете:

http://www.developergarden.com/fileadmin/microsites/ApiProject/Dokumente/Dokumentation/ObjectiveC-SDK-2.0/en/interface_voice_call_service.html

Я действительно не уверен, хотя (у меня нет времени, чтобы действительно посмотреть на него в данный момент). Я просто вспомнил, что где-то читал, что у них есть SDK для iOS, который также должен обрабатывать управление вызовами, поэтому я 'm размещая ссылку здесь для вас, чтобы узнать (и, надеюсь, скажите нам, если она работает).

Ответ 4

#pragma mark -
#pragma mark Call Handler Notification
-(void)notificationCallHandler {

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callReceived:) name:CTCallStateIncoming object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callEnded:) name:CTCallStateDisconnected object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callConnected:) name:CTCallStateConnected object:nil];

}
-(void)callEnded:(NSNotification*)notification {
     NSLog(@"callEnded");

}

-(void)callReceived:(NSNotification*)notification {
     NSLog(@"callReceived");
}
-(void)callConnected:(NSNotification*)notification {
     NSLog(@"callConnected");
}

Пусть это поможет вам

Ответ 5

если вы хотите настроить новый вызов, в то время как приложение находится в фоновом режиме, я не вижу правильного пути для этого, может быть, взломать lil, получить обновление местоположения (потому что u может получать обновления местоположения, когда приложение находится в фоновом режиме), и служба определения местоположения автоматически пробуждает ваше приложение, когда поступают новые данные о местоположении, и небольшое количество времени предоставляется приложению, в котором вы можете выполнить какой-либо код, в это время вы можете начать новый вызов.

u можно прочитать здесь:
выполните поиск по этой ссылке "Запуск службы определения значимых изменений" в этой ссылке Location Aware Programming guide  , и прочитайте абзац, который записывается после блока кода.